X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 1301-RMnj [36.240.123.227])
垢版 |
2022/08/07(日) 15:57:40.26ID:TS5TGpUB0
!extend:checked:vvvvvv:1000:512
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。次スレは>>950>>2の「次スレの立て方」を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://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
0134デフォルトの名無しさん (ワッチョイ 3d4f-Y/ct [180.0.191.133])
垢版 |
2022/10/25(火) 23:20:22.24ID:RDzJGkEc0
JavaScript(JS)は、Ruby の数倍難しい

初めてのJavaScript 第3版 ――ES2015以降の最新ウェブ開発、2017

例えば上の本は、サイの表紙のサイ本と呼ばれるけど、
これだけ勉強しても、文法しか学べない

改訂2版 Ruby逆引きハンドブック、2018

一方、サイ本と比べて、上の本は、多くの主要モジュールの使い方まで説明している。
大体のコーディングパターンまで学べる。
つまり中級者向けなのは、文法のページが少ないから

JSだと、ES3, ES5, ES6 の20年に及ぶ、膨大な文法の変遷を追っていかなければならない。
ES2015(ES6)から、ようやくクラスも出来て、Rubyっぽくなってきた

ちょっとした比較でも、あいまい比較演算子== は使ってはならない。
厳密比較演算子=== だけを使うとか、初心者がはまる罠が多い

学ぶ順序としては、Ruby → JS を勧める
0135デフォルトの名無しさん (ワッチョイ 3d4f-Y/ct [180.0.191.133])
垢版 |
2022/10/25(火) 23:31:33.41ID:RDzJGkEc0
>>131
では、callback 関数が呼ばれる前に、どちらの処理が呼ばれるか、既に分かっている状態でしょ。
直接引数に、呼ばれる処理を入れている

callfunction('huga');
callfunction('hage');

一方、>>130
では、callback関数が呼ばれる前には、どちらの処理が呼ばれるか、まだ分からない状態。
callback関数の中で初めて、どちらの処理が呼ばれるかが決まる
0141デフォルトの名無しさん (スップ Sdc3-H7SW [1.75.9.11])
垢版 |
2022/10/28(金) 18:36:54.83ID:HM5QgWcQd
もう少しいじってみたけどどうやらシードの桁数不足が問題なのかな
new Xorshift32(seed * 1000000)
とかにするだけで最初の値にもだいぶ幅が出る

いやいや偏りってそういうことじゃなくてって話ならごめんだけど
0142デフォルトの名無しさん (ワッチョイ e333-w8uH [59.190.185.6])
垢版 |
2022/10/28(金) 19:03:49.78ID:dQ+2i/bt0
>>139
不勉強でよくわかってないですが
やりたいのは後で再現できる単純にランダムな遅延時間がほしいだけです。
>>140
delayMaxを100にしてみましたら3回目ぐらいから取れそうと感じました。
シードが小さすぎるということは
一般的には
シードを与えるなら
乱数関数が受けられるシードの最大数/関数で生成されるシードの最大数をかけて
でシードの範囲を広げたほうがいいということなのでしょうか。
それとも単純に今回はシードが小さすぎて特殊事例であまり気にする必要はないと言う感じでしょうか。

お二人ともありがとうございます。
0143デフォルトの名無しさん (スップ Sdc3-H7SW [1.75.9.11])
垢版 |
2022/10/28(金) 20:24:11.90ID:HM5QgWcQd
next()が与えられた値にビット演算をあれこれやって次の値を出してるから
シードが2桁整数ではほとんどのビットがゼロなために
最初の演算結果が狭い範囲に収まってしまってるんでないかと
0146デフォルトの名無しさん (ワッチョイ 775f-FQW+ [14.12.73.128])
垢版 |
2022/11/02(水) 15:24:18.98ID:8PfyXsoj0
ブラウザ上での音声認識と録音について質問です。

現在、マイクから音声認識を行い、簡単な対話を行うWebアプリを作成しようとしています。
Web Speech APIのSpeechRecognitionを使用して音声認識には成功しましたが、これに加えて録音も同時に行いたいです。
SpeechRecognitionは喋っている内容を取っているので、そこから音声ファイルを作成できないかとやったのですが、目的の資料を見つけることができませんでした。

そのため、SpeechRecognitionと並行してmediaDevices.getUserMediaを使い録音する形で実装しました。
PCでは成功したのですが、スマホ(Android、iOS共に)だとmediaDevices.getUserMediaでストリームを使用とした時点で音声がすべてそちらに取られてしまい、音声認識が出来なくなってしまいました。

今度は録音した音声データをGCPのSpeech-to-Textの音声認識に回すかたちで実装してみましたが、即座に認識結果が得られず、対話のテンポが悪くなるため、微妙な感じになってしまいました。

音声認識と録音を両立する良い方法はないでしょうか?
0149デフォルトの名無しさん (ワッチョイ 174b-2YcT [110.2.215.28 [上級国民]])
垢版 |
2022/11/02(水) 15:53:32.48ID:3LaOl4E/0
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と表示されないんでしょうか?
0164デフォルトの名無しさん (ワッチョイ 5f4b-YZvV [110.2.215.28 [上級国民]])
垢版 |
2022/11/07(月) 15:24:45.79ID:zC6hz6+Y0
Adobe Illustratorのスクリプトを書くのにHTMLの知識いりますか?
JavaScriptの入門書を読んでたんですけど、前半のJavaScriptの文法の所まで読み終わりました
後半はHTMLとJavaScriptの組み込み方みたいになってるんだけど、ここ読む必要あるのかな?
もちろん知ってた方がためになるんだろうけど、次のAdobe JavaScriptの本へ行こうか迷っています…
0170デフォルトの名無しさん (ワッチョイ 5f4b-YZvV [110.2.215.28 [上級国民]])
垢版 |
2022/11/11(金) 22:39:38.06ID:6PYY3JKr0
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;ではそれ以降が実行されてしまいます
0173デフォルトの名無しさん (ワッチョイ 3697-FFna [121.94.16.107])
垢版 |
2022/11/12(土) 13:17:11.95ID:xCg5uX6U0
コールバック関数について、伺いたいのですが。
コールバック関数は、引数に渡される関数という理解でいますが。

これは関数であって、オブジェクトメソッドを渡すこともできますでしょうか。
例えば、
object.addEventlistener()
などの、メソッドも渡すことができますでしょうか?
0176デフォルトの名無しさん (ワッチョイ 3697-FFna [121.94.16.107])
垢版 |
2022/11/13(日) 15:10:49.67ID:xoKJX++V0
ありがとうございます。
Object.AddEventlistenerでも、コールバック関数になりうるということですね。
ただし、期待していることはできない。

関数(ユーザー定義)をコールバック関数にすることはイメージつくのですが。
オブジェクトメソッドをコールバック関数にするイメージがつきません。
何か、例文があれば教えていただけますでしょうか?
0177176 (ワッチョイ 3697-FFna [121.94.16.107])
垢版 |
2022/11/13(日) 15:14:57.91ID:xoKJX++V0
あ。addEventlistener以外で構いません。
0180デフォルトの名無しさん (ワッチョイ 3d4b-aW8A [110.2.215.28 [上級国民]])
垢版 |
2022/11/13(日) 17:36:35.00ID:BIywqmt20
AdobeScriptなのですが、
https://i.imgur.com/Ycwp6Nj.jpg
上の画像の「四角のパスの四隅をハサミツールで切って、塗りを線にする」まではスクリプトで出来るのですが、「短辺を特定する」ということはスクリプトで出来るのでしょうか?
一般的なJavaScriptの話でもいいのですが、出来るとか無理そうとか…
0181デフォルトの名無しさん (ワッチョイ a905-wHkz [210.143.72.233])
垢版 |
2022/11/13(日) 19:38:06.31ID:0s117XaL0
質問です、どなたか教えて下さい、どうか宜しくお願いいたします

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

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

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

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

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

としましたが、残念ながら自動的に再生ボタンを押すことができません。自動クリック自体が禁止
されているような雰囲気です。たぶんサイト側でクリック禁止にしているのだろうと思いますが
これを利用承諾画面と同じようにJacaScriptで自動クリックするする方法はないでしょうか?
0182デフォルトの名無しさん (ワッチョイ d501-8IZr [60.111.190.247])
垢版 |
2022/11/13(日) 20:25:40.17ID:cqK0B72A0
ユーザー操作が起点じゃない場合は音声再生をブロックする、という制限がブラウザ側でかかってることがある
その場合はブラウザの設定で解除できるかもしれない
0183デフォルトの名無しさん (ワッチョイ bd61-+FOd [180.15.119.124])
垢版 |
2022/11/13(日) 20:33:38.64ID:8b+kwr5c0
>>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();
でもいける
0185デフォルトの名無しさん (ワッチョイ a905-wHkz [210.143.72.233])
垢版 |
2022/11/13(日) 22:43:20.67ID:0s117XaL0
>>183
すばらしい!有り難うございます!そのどちらの方法でも再生ボタンがクリックできました!
何を勉強したらあなたのような達人になれるのでしょうか?本当に有り難うございました!

>>184
お答えくださり有り難うございます。ただ、残念ながらその方法はどちらもNGでした。
"player_ui" を "#player_ui" に変えても駄目なので、すみませんが>>183を使わせてもらいます。
0187186 (ワッチョイ 3d4b-OzUL [110.2.215.28 [上級国民]])
垢版 |
2022/11/14(月) 16:42:32.41ID:dW/V591r0
すみません、これがコードです。

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度だけの表示したいのです(表示する回数が多すぎることになるので)
0189デフォルトの名無しさん (ワッチョイ 3d4b-OzUL [110.2.215.28 [上級国民]])
垢版 |
2022/11/14(月) 17:46:10.99ID:dW/V591r0
>>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("グレースケールです");
}

これで出来ました。
ありがとうございます。
0190デフォルトの名無しさん (ワッチョイ 2abd-masj [133.209.119.15])
垢版 |
2022/11/14(月) 18:12:47.71ID:zxQDBIse0
すまん、敢えてここで聞かせて
Windows しか持っておらず、JavaScript の Safari での動作確認のため極力安い MacBook かなにかを買いたい。
中古でもなんでもいいんだけど、今時の Safari が動くやつって何を選べばいい?
Mac も iOS も Safari の系譜もよく分からず途方に暮れてる。
いわゆるブラウザのデベロッパーツールで動作確認したいので、多分 iPhone とかじゃだめなんだよね?
アドバイスおねがい
0192デフォルトの名無しさん (ワッチョイ a94e-Uv+W [210.138.216.243])
垢版 |
2022/11/14(月) 20:44:37.96ID:pZNm0HpP0
動作確認のために実機買うなんて景気のいい話だなぁ羨ましい
俺ならBrowserStackとかLambdaTest使っちゃうけどね
0194190 (ワッチョイ f1bd-masj [122.133.73.185])
垢版 |
2022/11/14(月) 22:33:47.26ID:llxM2eVb0
>>192
景気なんてよくねーよだからケチりたいんだろ。
でも何そのおもしろそうなキーワードは。調べてくる

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

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

なにはともあれ、取っ掛かりは掴んだ気がする。
ありがとう
0195デフォルトの名無しさん (ワッチョイ 3697-FFna [121.94.16.107])
垢版 |
2022/11/14(月) 23:54:57.52ID:h4ns2H1B0
イベントオブジェクトを使わず、thisを使って、
そのイベントの発生元の要素を取得することは可能でしょうか?
0197デフォルトの名無しさん (ワッチョイ a905-wHkz [210.143.72.233])
垢版 |
2022/11/15(火) 08:04:13.30ID:mRl02hRT0
すみません、先日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で再生ボタンをクリックできるでしょうか?
どなたかもう一度だけ教えてください、宜しくお願いいたします
0206デフォルトの名無しさん (ワッチョイ 3d4b-aW8A [110.2.215.28 [上級国民]])
垢版 |
2022/11/16(水) 01:28:38.23ID:yZvimkXe0
>>205
「画像とテキストが一緒になってる図で、画像だけ拡大縮小してテキストサイズはそのままにする」というスクリプトなんですけど、キャンセルすると図の大きさはそのままでテキストだけ拡大縮小してしまうんですよ
これでは困るのでキャンセルの箇所でコードから抜け出したい
0210デフォルトの名無しさん (ワッチョイ bd10-FFna [180.12.82.129])
垢版 |
2022/11/17(木) 16:50:10.12ID:BipbxCG90
<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の位置が動くのはどうしてですか?
0212デフォルトの名無しさん (ワッチョイ 46bd-masj [49.129.242.78])
垢版 |
2022/11/17(木) 18:17:32.44ID:6VGHAaqQ0
>>210
画面のレンダリングは逐一行われないから。
イベント契機で実行されたスクリプトの処理を一旦終えたときその最終的な結果がレンダリングされるというか、一旦処理を終えないとレンダリングされないと思っておけばいい。
setInterval のやつは、インターバルの契機で実行された処理は1コマ分の処理だけして終わるから、その都度レンダリングされる(かもしれない)。
実際は周期があまり高頻度だと、処理を終えてもレンダリングされるとは限らず間引かれたりする。
ただ未レンダリングだからといってもDOMの状態やスタイルの設定などは逐一適用されてる。
0213デフォルトの名無しさん (ワッチョイ bd10-iQtw [180.12.82.129])
垢版 |
2022/11/17(木) 20:15:58.57ID:BipbxCG90
>>212
そうだったんですか
ありがとうございます
0221デフォルトの名無しさん (ワッチョイ db4b-7Gcv [110.2.215.28 [上級国民]])
垢版 |
2022/11/19(土) 19:26:10.00ID:2irpXLl70
例えばドキュメント上に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]まで合計するにはこの続きにどういうコードを書けばいいのでしょうか?
(間違っていたら既に書いてあるコードを変更してください)
0228デフォルトの名無しさん (JP 0Hbb-stRS [126.249.157.89])
垢版 |
2022/11/21(月) 07:16:36.42ID:uz2/XLFXH
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);
}
}
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況