[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/25 03:31 / Filesize : 355 KB / Number-of Response : 1024
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

JavaScript の質問用スレッド vol.125



1 名前:デフォルトの名無しさん mailto:sage [2022/08/07(日) 15:57:40.26 ID:TS5TGpUB0.net]
!extend:checked:vvvvvv:1000:512
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。次スレは>>950>>2の「次スレの立て方」を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。

■前スレ
JavaScript の質問用スレッド vol.124
https://mevius.5ch.net/test/read.cgi/tech/1636525464/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured

152 名前:デフォルトの名無しさん (ワッチョイ 174b-2YcT [110.2.215.28 [上級国民]]) mailto:sage [2022/11/02(水) 15:53:32.48 ID:3LaOl4E/0.net]
function double(number){
const result=number*2;
return result;
};

const a=double(10);
console.log(a);

でコンソールに20と表示されますが、return resultの所のイメージがつかめません

function double(number){
const result=number*2;
};

console.log(result);

もっと簡単にこれでは20と表示されないんでしょうか?

153 名前:デフォルトの名無しさん (ワッチョイ 174b-2YcT [110.2.215.28 [上級国民]]) mailto:sage [2022/11/02(水) 16:00:00.37 ID:3LaOl4E/0.net]
すみません
わかりました
double(number)に戻り値number*2を返してるんですね
だからdouble(10)で20になると

154 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 18:16:59.98 ID:O63UpHJfr.net]
>>148
そいつにかまってはいけない

155 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 21:50:32.06 ID:3LaOl4E/0.net]
JavaScriptのパズルをやってたんですけど、このコードだけで意味がわかりますか?
https://i.imgur.com/A4xj7Qh.jpg

最初の定義とか色々省かれていませんか?
初心者だからはっきりわからないのですが…

156 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 22:07:02.98 ID:zmf8vxSNM.net]
これぐらいなら簡単
変数名と関数名がちゃんと付けられてるからそこから読んでいけば普通に読める

157 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 22:12:42.94 ID:3LaOl4E/0.net]
>>153
変数のlistとかどこにも定義されて無いんですけど…
console.log(list)とか突然書かれても、初心者にはわかりにくい
どこから出てきたのかと…

158 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 22:46:00.31 ID:f9FvTICb0.net]
>>152
任意の数値リストを突っ込むと最大値出してくれるっていうコードだろこれ

159 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 23:13:35.51 ID:J736PzjWM.net]
問題の方にあるのかも知らんし
ここで聞かれても分かんね

160 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 23:36:43.64 ID:3LaOl4E/0.net]
問題はこんな感じです
https://i.imgur.com/lImN0zM.jpg
(画像の下の方が切れてますが、>>152の画像と同じものが入っているだけです)

あまり親切じゃないから初心者には向いて無いのかな?



161 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 23:40:18.85 ID:t/iark2f0.net]
全部負の数値だと使えない

162 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 11:43:01.93 ID:39/cO+p70.net]
このコードは十分初心者向けに書かれていると思うけどねぇ
ただmax=0にしているから、基本は0より大きな数の配列の中から最大値を調べる処理という事に

163 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 12:47:18.10 ID:EP9jPLDR0.net]
>>159
この学習アプリやってた

Google製のJavaScript教育ツール「Grasshopper」は基礎から学べて初心者に優しい
https://forest.watch.impress.co.jp/docs/serial/progedu/1404361.html

164 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:53:23.61 ID:78vcP9/m0.net]
次のステップなどで対応するならいいけどね
max の初期値を配列の先頭から取れば済むだけだが

165 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 20:27:36.79 ID:EP9jPLDR0.net]
ようやくわかりました
2つめの関数の中で前に定義した1つめの関数を実行してるんですね
関数は定義&実行で1ペアと考えないといけない
次に進みます

166 名前:デフォルトの名無しさん mailto:sage [2022/11/04(金) 08:09:59.45 ID:RzANRCFJ0.net]
#を付ける プライベートクラスフィールドが分かりにくい。
解説しているサイトも少ない。

167 名前:デフォルトの名無しさん mailto:sage [2022/11/07(月) 15:24:45.79 ID:zC6hz6+Y0.net]
Adobe Illustratorのスクリプトを書くのにHTMLの知識いりますか?
JavaScriptの入門書を読んでたんですけど、前半のJavaScriptの文法の所まで読み終わりました
後半はHTMLとJavaScriptの組み込み方みたいになってるんだけど、ここ読む必要あるのかな?
もちろん知ってた方がためになるんだろうけど、次のAdobe JavaScriptの本へ行こうか迷っています…

168 名前:デフォルトの名無しさん mailto:sage [2022/11/07(月) 15:29:11.27 ID:zC6hz6+Y0.net]
DTP(印刷)でillustratorを使ってるのでWebは扱っていません

169 名前:デフォルトの名無しさん mailto:sage [2022/11/07(月) 15:34:00.02 ID:FsgEaHF8r.net]
AdobeのjavascriptというかESバージョンめちゃくちゃ古くて記述するの苦労したが最近はどうなんだ

170 名前:164 mailto:sage [2022/11/07(月) 15:35:27.96 ID:zC6hz6+Y0.net]
自己レスですが必要無いそうです
ES2015以降も必要無いそうです
constとかletが使えないので全部varになってる



171 名前:デフォルトの名無しさん mailto:sage [2022/11/07(月) 16:15:41.06 ID:5T/PrU7d0.net]
>>164
CEPでも使わない限りはHTMLの知識は不要。

172 名前:デフォルトの名無しさん mailto:sage [2022/11/07(月) 16:33:24.89 ID:zC6hz6+Y0.net]
>>168
ありがとうございます。

173 名前:デフォルトの名無しさん mailto:sage [2022/11/11(金) 22:39:38.06 ID:6PYY3JKr0.net]
pg9 = win1.pnl.add('group')
pg9.orientation = "row"
CAN = pg9.add("button",[0,0,100,30],"cancel")
OK = pg9.add("button",[0,0,100,30],"OK")
CAN.onClick = function(){win1.close()}
OK.onClick = function(){
win1.close()
dofn()
}
win1.show()
}

// テキストを元のサイズに戻すための計算
var txtresize=100/bai*100;

// テキストフレームだけを選択する
activeDocument.selection = null; // 全ての選択を解除する
var txtObj = activeDocument.textFrames;
for (var i=0; i<txtObj.length; i++){ // テキストフレーム数だけ繰り返す
try {
txtObj[i].selected = true; // 選択する
}catch(e){}
}

//選択したテキストを"sel"とする
var sel = app.activeDocument.selection;

//選択したテキストの数で繰り返す
for (i=0; i<sel.length; i++)
{
//選択したテキストの幅と高さを元の大きさに戻す
sel[i].resize(txtresize,txtresize);
}

// オブジェクトの選択を解除する
for (var i=0; i<sel.length; i++){
try{
sel[i].selected = false;
}catch(e){}
}

プログラムの最初の方は省略したのですが、
CAN.onClick = function(){win1.close()}の所で、キャンセルがクリックされた時にそれ以降のプログラムが実行されないようにしたいのですが、どう書き換えればいいでしょうか? return;ではそれ以降が実行されてしまいます

174 名前:デフォルトの名無しさん mailto:sage [2022/11/11(金) 22:42:38.98 ID:6PYY3JKr0.net]
CAN.onClick = function(){win1.close();exit();}
みたいなことをやりたいのですが、exit()はAdobeScriptにはありません…

175 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 05:24:15.41 ID:/in1tyv80.net]
>>170-171
質問の意味がわからない

CAN.onClick = function(){win1.close()}

で処理は終了している

176 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 13:17:11.95 ID:xCg5uX6U0.net]
コールバック関数について、伺いたいのですが。
コールバック関数は、引数に渡される関数という理解でいますが。

これは関数であって、オブジェクトメソッドを渡すこともできますでしょうか。
例えば、
object.addEventlistener()
などの、メソッドも渡すことができますでしょうか?

177 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 08:09:24.18 ID:YDVUHmoCr.net]
object.addEventlistener なら関数だから渡せるけど
object.addEventlistener() は渡せないな

178 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 09:42:00.89 ID:wFqjoTWK0.net]
>>173
object.addEventlistenerで渡せるが、実行時のthis値が変わるので、期待通りに動作しない
bindを使うか、「コールバック関数を渡す関数」にthis値束縛機能があればそれを使う必要がある

179 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 15:10:49.67 ID:xoKJX++V0.net]
ありがとうございます。
Object.AddEventlistenerでも、コールバック関数になりうるということですね。
ただし、期待していることはできない。

関数(ユーザー定義)をコールバック関数にすることはイメージつくのですが。
オブジェクトメソッドをコールバック関数にするイメージがつきません。
何か、例文があれば教えていただけますでしょうか?

180 名前:176 [2022/11/13(日) 15:14:57.91 ID:xoKJX++V0.net]
あ。addEventlistener以外で構いません。



181 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 15:38:14.40 ID:wFqjoTWK0.net]
>>176-177
this値の変え方まで書いているのに、なぜにイメージ?
コールバック関数を使ったコードを書いて試せばすぐにわかる問題

182 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 15:46:58.08 ID:wFqjoTWK0.net]
Function.prototype.bind
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

183 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 17:36:35.00 ID:BIywqmt20.net]
AdobeScriptなのですが、
https://i.imgur.com/Ycwp6Nj.jpg
上の画像の「四角のパスの四隅をハサミツールで切って、塗りを線にする」まではスクリプトで出来るのですが、「短辺を特定する」ということはスクリプトで出来るのでしょうか?
一般的なJavaScriptの話でもいいのですが、出来るとか無理そうとか…

184 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 19:38:06.31 ID:0s117XaL0.net]
質問です、どなたか教えて下さい、どうか宜しくお願いいたします

インターネットラジオ JCBA FMはな再生ページ
https://www.jcbasimul.com/fmhana

上記サイトを開くとCookie利用承諾の画面が出てきます。この利用承諾画面は

document.getElementsByClassName("cookieBanner__btn")[0].click()

とすることで自動的にOKボタンを押して閉じることができました。引き続き再生ボタンを押したいので

document.getElementsByClassName("MuiSvgIcon-root")[0].click()

としましたが、残念ながら自動的に再生ボタンを押すことができません。自動クリック自体が禁止
されているような雰囲気です。たぶんサイト側でクリック禁止にしているのだろうと思いますが
これを利用承諾画面と同じようにJacaScriptで自動クリックするする方法はないでしょうか?

185 名前:デフォルトの名無しさん [2022/11/13(日) 20:25:40.17 ID:cqK0B72A0.net]
ユーザー操作が起点じゃない場合は音声再生をブロックする、という制限がブラウザ側でかかってることがある
その場合はブラウザの設定で解除できるかもしれない

186 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 20:33:38.64 ID:8b+kwr5c0.net]
>>181
iframeの中かつshadowDOMの中なので一発で要素を取得できない
document.querySelector(".radioPlayer__iframe").contentDocument.querySelector("#player_ui").shadowRoot.querySelector("button").click();

jcba-playerカスタムエレメントはplay()メソッドが実装されてるようなので
document.querySelector(".radioPlayer__iframe").contentDocument.querySelector("#player_ui").play();
でもいける

187 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 20:47:17.41 ID:Kw8DgDNz0.net]
こうじゃないか
document.getElementById("player_ui").shadowRoot.querySelectorAll("button")[0].click()
または
document.getElementById("player_ui").play();

188 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 22:43:20.67 ID:0s117XaL0.net]
>>183
すばらしい!有り難うございます!そのどちらの方法でも再生ボタンがクリックできました!
何を勉強したらあなたのような達人になれるのでしょうか?本当に有り難うございました!

>>184
お答えくださり有り難うございます。ただ、残念ながらその方法はどちらもNGでした。
"player_ui" を "#player_ui" に変えても駄目なので、すみませんが>>183を使わせてもらいます。

189 名前:デフォルトの名無しさん mailto:sage [2022/11/14(月) 15:59:19.18 ID:dW/V591r0.net]
if( ){ };の( )の中に「関数txtfn()が一度も実行されていなかったら」という条件を書きたいんですけど、どう書けばいいんでしょうか?
無理でしょうか?

190 名前:186 mailto:sage [2022/11/14(月) 16:42:32.41 ID:dW/V591r0.net]
すみません、これがコードです。

SEL = activeDocument.selection
LAY = activeDocument.activeLayer

for(s=0; s<SEL.length; s++) SELfn(SEL[s])

function SELfn(sx){
if(sx.typename != 'PathItem') return
if(sx.filled == false) return
c1 = sx.fillColor
if(c1 != "[GrayColor]"){
    val = c1
        txtfn();
}
}

function txtfn(){
alert(val+"です");
}
alert("グレースケールです");


本当は、関数txtfn()が一度も実行されなかった場合に最後に「グレースケールです」と表示したいのですが、
このコードのままだと毎回最後に「グレースケールです」と表示されてしまいます。
「グレースケールです」は1度だけの表示したいのです(表示する回数が多すぎることになるので)



191 名前:デフォルトの名無しさん mailto:sage [2022/11/14(月) 17:23:26.59 ID:Ofrc3j5I0.net]
単にループ前にフラグをfalseにでもしておいて、一度でも実行すればtrueにすれば判断出来るのでは?

192 名前:デフォルトの名無しさん mailto:sage [2022/11/14(月) 17:46:10.99 ID:dW/V591r0.net]
>>188
SEL = activeDocument.selection
LAY = activeDocument.activeLayer

var yk=0;

for(s=0; s<SEL.length; s++) SELfn(SEL[s])

function SELfn(sx){
if(sx.typename != 'PathItem') return
if(sx.filled == false) return
c1 = sx.fillColor

if(c1 != "[GrayColor]"){
val = c1
txtfn();
}
}

function txtfn(){
alert(val+"です");
yk=1;
}
if(yk!=1){
alert("グレースケールです");
}

これで出来ました。
ありがとうございます。

193 名前:デフォルトの名無しさん (ワッチョイ 2abd-masj [133.209.119.15]) mailto:sage [2022/11/14(月) 18:12:47.71 ID:zxQDBIse0.net]
すまん、敢えてここで聞かせて
Windows しか持っておらず、JavaScript の Safari での動作確認のため極力安い MacBook かなにかを買いたい。
中古でもなんでもいいんだけど、今時の Safari が動くやつって何を選べばいい?
Mac も iOS も Safari の系譜もよく分からず途方に暮れてる。
いわゆるブラウザのデベロッパーツールで動作確認したいので、多分 iPhone とかじゃだめなんだよね?
アドバイスおねがい

194 名前:デフォルトの名無しさん (スッップ Sd7a-4CYG [49.98.130.245]) mailto:sage [2022/11/14(月) 18:37:09.30 ID:srKPlYrDd.net]
safariのバージョンってiOSと連動だって話だったと思うから最新のiOSサポートしてる機種ならええんでないの?
Mac系のスレで理由話して最新のiOSが動く安いやつどれ?って聞くのが確実だろう

195 名前:デフォルトの名無しさん [2022/11/14(月) 20:44:37.96 ID:pZNm0HpP0.net]
動作確認のために実機買うなんて景気のいい話だなぁ羨ましい
俺ならBrowserStackとかLambdaTest使っちゃうけどね

196 名前:デフォルトの名無しさん (ワッチョイ dd5f-PnSp [14.8.104.32]) mailto:sage [2022/11/14(月) 21:12:34.76 ID:SgEq73X20.net]
iPhone持ってる人に実機テストしてもらっちゃうな

197 名前:190 (ワッチョイ f1bd-masj [122.133.73.185]) mailto:sage [2022/11/14(月) 22:33:47.26 ID:llxM2eVb0.net]
>>192
景気なんてよくねーよだからケチりたいんだろ。
でも何そのおもしろそうなキーワードは。調べてくる

>>193
これまで作ったのをたまたま iPhone で見たら動いてないのがあってね。
元々 Safari とか眼中には無かったけどそんなに特殊なことやってるとも思ってなかったんで、動かないとか思ってなかった。
あんまり気分悪いんでちょっと調べておこうかと。

>>191
やっぱ最新OS じゃないとダメかということでそこを軸に探すと、フリマで 2万台くらいらしいってことは分かった。
あと iPad の Safari でもデベロッパーツールを動かせるらしいことが分かったので、そっちの線もありそう。
つか MacOS と iOS って違うのね…

なにはともあれ、取っ掛かりは掴んだ気がする。
ありがとう

198 名前:デフォルトの名無しさん [2022/11/14(月) 23:54:57.52 ID:h4ns2H1B0.net]
イベントオブジェクトを使わず、thisを使って、
そのイベントの発生元の要素を取得することは可能でしょうか?

199 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 06:06:01.39 ID:zBqzsCj00.net]
>>195
無理

200 名前:デフォルトの名無しさん (ワッチョイ a905-wHkz [210.143.72.233]) mailto:sage [2022/11/15(火) 08:04:13.30 ID:mRl02hRT0.net]
すみません、先日JavaScriptによるクリックについて質問した者です
情けないのですが、今度は別サイトの再生ボタンがどうしても押せず困っています

インターネットラジオFM++ FMはなび再生ページ
https://fmplapla.com/fmhanabi

ソース見るとiframeもshadowDOMも使っていないように見えるのに、再生ボタンを押せません

document.getElementsByClassName("player_start_button")[0].click()
document.getElementsByClassName("start_stop_button_button")[0].click()

上記2つとも駄目でした。どうすればJavaScriptで再生ボタンをクリックできるでしょうか?
どなたかもう一度だけ教えてください、宜しくお願いいたします



201 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 09:45:28.64 ID:ott+UO1u0.net]
該当する要素がない

start_btns = document.getElementsByClassName("player_start_button")
console.log( start_btns.length ) //=> 0

start_stop_btns = document.getElementsByClassName("start_stop_button_button")
console.log( start_stop_btns.length ) //=> 0

202 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 11:01:59.02 ID:9SlnRoJw0.net]
>>197
ブラウザの DevTools でイベントリスナーの click を見ると見つかる

203 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 11:16:18.44 ID:9SlnRoJw0.net]
>>199
chromeだと当該要素の「検証」をすると出てくる

204 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 19:29:43.82 ID:T0qQfj8P0.net]
>>197
対象のclassをよく見てみよう

205 名前:デフォルトの名無しさん mailto:sage [2022/11/15(火) 20:10:55.73 ID:mRl02hRT0.net]
>>201
document.querySelectorAll("button")[0].click()で行けました
有り難うございました

206 名前:デフォルトの名無しさん mailto:sage [2022/11/16(水) 00:23:35.29 ID:q+7X+iJ00.net]
こういう程の良い距離感のアドバイスを遅れる人間になりたいですな

207 名前:デフォルトの名無しさん mailto:sage [2022/11/16(水) 01:03:52.10 ID:yZvimkXe0.net]
>>170ですが、やっぱりキャンセルボタンを押すと
CAN.onClick = function(){win1.close()}の所で終わらなくて、最後の行まで実行されるんですがどうすれば中断出来るんでしょうか?
キャンセルしてもテキストの大きさが変わって終わります

208 名前:デフォルトの名無しさん (テテンテンテン MM8e-PjKb [133.106.50.10]) mailto:sage [2022/11/16(水) 01:15:16.40 ID:6ujCOi6jM.net]
そもそもキャンセルボタン押す前にテキストサイズ変わってんじゃねえの

209 名前:デフォルトの名無しさん (ワッチョイ 3d4b-aW8A [110.2.215.28 [上級国民]]) mailto:sage [2022/11/16(水) 01:28:38.23 ID:yZvimkXe0.net]
>>205
「画像とテキストが一緒になってる図で、画像だけ拡大縮小してテキストサイズはそのままにする」というスクリプトなんですけど、キャンセルすると図の大きさはそのままでテキストだけ拡大縮小してしまうんですよ
これでは困るのでキャンセルの箇所でコードから抜け出したい

210 名前:デフォルトの名無しさん (ワッチョイ bd4f-FFna [180.0.191.133]) mailto:sage [2022/11/16(水) 03:25:10.60 ID:pSETlPcG0.net]
CAN.onClick = function(){win1.close(); return; }
ではなく、

CAN.onClick = function(){win1.close()}
return;

上は、その無名関数から抜け出すだけで、
下は、全体の処理から抜け出す



211 名前:デフォルトの名無しさん mailto:sage [2022/11/16(水) 14:57:45.45 ID:yZvimkXe0.net]
>>207
まだ仕事中で確かめられていないのですが、キャンセルでなくてOKの時も抜けたりしませんか?

212 名前:デフォルトの名無しさん mailto:sa []
[ここ壊れてます]

213 名前:ge mailto:2022/11/16(水) 16:05:43.43 ID:yZvimkXe0.net [ >>207
return;を入れると、違う動作を始めたので保留にします。
時間がある時に考えます。
どうもありがとうございました。 ]
[ここ壊れてます]

214 名前:デフォルトの名無しさん [2022/11/17(木) 16:50:10.12 ID:BipbxCG90.net]
<div id="zahyou" style="position:absolute">aaaaaaaaaa</div>

<スクリプト>
for(let n=1;n<=100;n++){
if(n % 2 === 0){
document.getElementById("zahyou").style.left = "0px";
}
else{
document.getElementById("zahyou").style.left = "200px";

}
}
</スクリプト>

としてもaaaaaaaaaaの位置が全く動かないけど

<スクリプト>
let n=0;
setInterval(
function(){
if(n % 2===0){
document.getElementById("zahyou").style.left = "0px";
}
else{
document.getElementById("zahyou").style.left = "200px";
}
n++;
}
,100
);
</スクリプト>
とするとaaaaaaaaaaの位置が動くのはどうしてですか?

215 名前:デフォルトの名無しさん mailto:sage [2022/11/17(木) 17:45:40.38 ID:ZrcXbqFYM.net]
上も動いてるよ
一瞬で終わるから見えないだけ

216 名前:デフォルトの名無しさん mailto:sage [2022/11/17(木) 18:17:32.44 ID:6VGHAaqQ0.net]
>>210
画面のレンダリングは逐一行われないから。
イベント契機で実行されたスクリプトの処理を一旦終えたときその最終的な結果がレンダリングされるというか、一旦処理を終えないとレンダリングされないと思っておけばいい。
setInterval のやつは、インターバルの契機で実行された処理は1コマ分の処理だけして終わるから、その都度レンダリングされる(かもしれない)。
実際は周期があまり高頻度だと、処理を終えてもレンダリングされるとは限らず間引かれたりする。
ただ未レンダリングだからといってもDOMの状態やスタイルの設定などは逐一適用されてる。

217 名前:デフォルトの名無しさん [2022/11/17(木) 20:15:58.57 ID:BipbxCG90.net]
>>212
そうだったんですか
ありがとうございます

218 名前:デフォルトの名無しさん mailto:sage [2022/11/18(金) 09:19:55.63 ID:Wj1K/ZC10.net]
a = "0px";
a = "200px";

a = "0px";
a = "200px";

a = "0px";
a = "200px";

こういう処理を100回やってから、100回目の後だけ再描画されるのだろう。
1〜99回までは値が設定されるだけで、再描画されない

219 名前:デフォルトの名無しさん mailto:sage [2022/11/18(金) 17:10:38.42 ID:T5zu6F7Id.net]
横からで申し訳ないけど、アニメーション処理を行うならsettimeoutとかでわざと描画間隔を空ける必要があるって解釈でいいのかな?

220 名前:デフォルトの名無しさん mailto:sage [2022/11/18(金) 17:16:10.46 ID:Zs9eTx2N0.net]
>>215
一コマ毎にイベント処理を終えブラウザに処理を返す構造にしないといけない
あるいはスタイルや SVG でアニメーションさせるか



221 名前:デフォルトの名無しさん mailto:sage [2022/11/18(金) 17:23:26.00 ID:UFs4jVzI0.net]
ブラウザでは、Performanceパネルや
タイムラインパネルでチェックできる

222 名前:デフォルトの名無しさん mailto:sage [2022/11/18(金) 19:14:38.47 ID:RNEbLEjB0.net]
アニメーションならsetTimeoutよりrequestAnimationFrameだね

223 名前:デフォルトの名無しさん mailto:sage [2022/11/18(金) 21:22:51.98 ID:dA0W7FfK0.net]
>>216
>>218
わっちょい違うけど同一人物です
勉強になります

224 名前:デフォルトの名無しさん mailto:sage [2022/11/19(土) 04:30:35.89 ID:uCGRkc1L0.net]
ゲームセンターにある機械とか、パソコンゲームでは、よくコマ(フレーム)落ちが起きる

1/30秒とか1/60秒の間に、処理が終わらないので、再描画できない

225 名前:デフォルトの名無しさん mailto:sage [2022/11/19(土) 19:26:10.00 ID:2irpXLl70.net]
例えばドキュメント上に5つのアイテムがあるとして、その5つのアイテムそれぞれの幅を合計したものが知りたいのですが、途中までコードを考えました
(5つというのは仮のアイテム数で実際は未定です)

DOC=activeDocument;
SEL=DOC.selection;

for(i=0;i<SEL.length;s++){
BND=SEL[i].geometricbounds;
W=BND[2]-BND[0];

Wが最初の1つのアイテムの幅になると思うのですが、これをSEL[0]~SEL[4]まで合計するにはこの続きにどういうコードを書けばいいのでしょうか?
(間違っていたら既に書いてあるコードを変更してください)

226 名前:デフォルトの名無しさん mailto:sage [2022/11/19(土) 19:32:18.92 ID:2irpXLl70.net]
すみません
質問してから気付きました
これでいけますか?

DOC=activeDocument;
SEL=DOC.selection;

for(i=0;i<SEL.length;s++){
BND=SEL[i].geometricbounds;
W1=BND[2]-BND[0];
W=W+W1;
}

227 名前:デフォルトの名無しさん mailto:sage [2022/11/19(土) 23:28:09.02 ID:9yqGhBqR0.net]
>>222
試してから質問しよう

228 名前:デフォルトの名無しさん mailto:sage [2022/11/20(日) 07:58:25.96 ID:zjUQ0JII0.net]
for の前にW=0してね

229 名前:デフォルトの名無しさん mailto:sage [2022/11/20(日) 19:31:32.32 ID:bgVSrlSG0.net]
>>224
ありがとうございます

for(i=0;i<SEL.length;i++){ ~ }っていう式がコードの中にいくつも出てくるんですけど、変数iのところはそれぞれの式で変えないといけないんでしょうか?
for(j=0;j<SEL.length;j++){ ~ }とか。
関数内だけですか?
同じ変数文字が使えるのは

230 名前:デフォルトの名無しさん mailto:sage [2022/11/20(日) 20:42:57.11 ID:XzYfw6V5H.net]
いい質問ですね
変数のスコープの問題なので試してみたらいかがでしょう?
jsのスコープをしっかり押さえると
伸びしろが変わります!



231 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 02:03:46.52 ID:ZMd64Nu10.net]
ありがとうございます
勉強を始めて1か月ですけど改造はわりとうまく出来るようになりました
最初は何が書いてあるのかわからないんだけど、ジーッとしつこく見てるとわかって来ますね

232 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 07:16:36.42 ID:uz2/XLFXH.net]
let も var も(スコープ内)再代入可能です
let i=0;

for(i=0;i<10;i++,console.log(1,i));
for(i=0;i<10;i++,console.log(2,i));
console.log('------');

for(i=0;i<10;i++){
console.log(3,i);
for(i=0;i<10;i++){
console.log(4,i);
}
}
console.log('------');

let t=0;
for(i=0;i<10;i++){
console.log(5,i);
for(t=0;t<10;t++){
console.log(6,t);
}
}

233 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 08:11:57.92 ID:ygpzkhrQ0.net]
>>228
中腹の二重ループについて敢えてやってるなら説明が必要じゃね。

234 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 18:52:09.71 ID:uz2/XLFXH.net]
>>229
for(i=0;i<SEL.length;i++){}
for(j=0;j<SEL.length;j++){}
と質問されてるので入子構造なんだろうなと

235 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 18:58:18.92 ID:ZMd64Nu10.net]
入子じゃないですよ
ドキュメント上にアイテムが複数あって、何回も全アイテムを移動したり変形したりする必用があるので並列です

236 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 19:04:10.48 ID:ZMd64Nu10.net]
>>228
何回も使えるんですね
ありがとうございます

237 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 19:35:19.44 ID:+zVCoGZg0.net]
>>230
二重ループの外と内とで同じ i を使ってることについてよ。
敢えてやってるならどういうメカニズムでどういう結果になるのか説明てあげないと分からないんじゃない?

238 名前:デフォルトの名無しさん (ワッチョイ 9309-2FOX [150.91.1.219]) mailto:sage [2022/11/21(月) 20:09:25.61 ID:T5+vrdKC0.net]
カスタム要素って使われてます?

239 名前:デフォルトの名無しさん (JP 0Hbb-stRS [126.249.157.89]) mailto:sage [2022/11/21(月) 20:10:57.61 ID:uz2/XLFXH.net]
>>232

// No 1
for(i=0;i<10;i++){
console.log(3,i);
for(i=0;i<10;i++){
console.log(4,i);
}
}
console.log('------');


// No 2
let t=0;
for(i=0;i<10;i++){
console.log(5,i);
for(t=0;t<10;t++){
console.log(6,t);
}
}

No1とNo2の違いは分かりますでしょうか?
一度コードを実行してみてください

No1のfor文の繰り返し1回目は、i=0です
次にNo2のfor文では、i=1から始まります
その後No2のfor文が繰り返しされi=10までカウントされNo1のfor文繰り返しに戻ります
その時、i=10になっているので、No1のfor文は終了になり、for文を抜けます

入子構造のインクリメント演算子では同じ変数を使うときには要注意ですね

240 名前:デフォルトの名無しさん mailto:sage [2022/11/22(火) 17:55:58.75 ID:VelmWtaS0.net]
>>235
ありがとうございます
なかなか難しいですね
勉強を続けます



241 名前:デフォルトの名無しさん mailto:sage [2022/11/22(火) 17:58:38.56 ID:VelmWtaS0.net]
今日はこういう発見がありました
当たり前と言えば当たり前なんですが
https://i.imgur.com/xkx4UUX.jpg

242 名前:デフォルトの名無しさん [2022/11/22(火) 18:07:50.06 ID:iGHsIGH/0.net]
let、constどころかvarすら使えない(使わない)のであればPythonにでも行ったほうがいいんじゃない?

243 名前:デフォルトの名無しさん mailto:sage [2022/11/22(火) 18:52:57.26 ID:VelmWtaS0.net]
>>238
adobeスクリプトですがvarは使えます
他人のスクリプトを改造してる段階で、potisionで正しく並べられていなかったのでgeometricBounds[3]にしたと。
adobeのソフトはJavaScriptでないと動きません

244 名前:デフォルトの名無しさん mailto:sage [2022/11/22(火) 19:10:38.94 ID:VelmWtaS0.net]
セミコロンも入って無いし、あまりお手本としては良くないかも
でもこの人のadobe スクリプトが一番わかりやすいので

245 名前:デフォルトの名無しさん mailto:sage [2022/11/22(火) 19:40:30.69 ID:/QBTlFnBH.net]
何を制御してるのか知りませんけれど
お好きなように言語を選んで
お好きなようにコードを書けばいいと思います
楽しく好きなように自由に!ですね

JSを使う場合の注意点ですけど
古いJSとの互換性を保つため
JSは結構複雑怪奇な言語になりつつあります

変数の取り扱いはどこ言語でも慎重に設計しますけど
JSの変数とスコープはちょっと特殊なので
制御系でJS扱うのなら注意したほうがって思います

246 名前:デフォルトの名無しさん mailto:sage [2022/11/23(水) 01:04:55.03 ID:Gf+fcBNM0.net]
推奨しない書き方はほぼESLintで弾けるだろ

247 名前:デフォルトの名無しさん mailto:sage [2022/11/23(水) 14:55:32.43 ID:uQH5TeI20.net]
ドキュメント内の全てのテキストフレームを選択するのは、

var txtObj = activeDocument.textFrames;
for (var i=0; i<txtObj.length; i++){
txtObj[i].selected = true;
}

で、ここからそれらを変形させたりしていくんですけど、
ドキュメント内全てでは無くて、最初に選択したものの中から
さらにテキストフレームのみを選択するにはどう書けばいいのでしょうか?

var sel=activeDocument.selection;
  var txtObj = sel.textFrames;
for (var i=0; i<txtObj.length; i++){
txtObj[i].selected = true;

これでは、var txtObj = sel.textFrames;でエラーが出ます。


ドキュメント内の選択したものの中のテキストフレームのみを選択しないと、
ドキュメント内の全てのテキストフレームが変形されてしまいます。

248 名前:243 mailto:sage [2022/11/23(水) 15:35:10.48 ID:uQH5TeI20.net]
var sel=activeDocument.selection;
for (var i=0; i<sel.length; i++){
if(sel[i].typename != "TextFrame"){
sel[i].selected = false;
}
}

これで出来ました。
お騒がせしました。

249 名前:デフォルトの名無しさん mailto:sage [2022/11/23(水) 15:52:37.80 ID:QLRwruG1d.net]
JavaScriptの一般的な文法とかの話はともかく、adobe固有の問題はここで聞くべきではないよ

250 名前:デフォルトの名無しさん mailto:sage [2022/11/24(木) 09:02:34.19 ID:8kN4Xh6N0.net]
>>244
>>245の言うとおり、もはやここで聞く内容ではない。
adobe forumで聞いた方がいいけど、
レベル的にまだネットで調べれば簡単に答えが見つかる内容だから
なるべく自分で調べたらいいと思う。



251 名前:デフォルトの名無しさん mailto:sage [2022/11/24(木) 13:05:30.40 ID:DUoZRcjr0.net]
一般的なJavaScriptってgeometricBoundsとか使いませんか?
長方形の座標を得るメソッド

252 名前:デフォルトの名無しさん mailto:sage [2022/11/24(木) 13:16:11.58 ID:8kN4Xh6N0.net]
>>247
同じアドビでもindesignとillustratorではgeometricBoundsのx,y値の順番が異ってたり、
もはやアプリごとの話題になってくる。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<355KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef