質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1163閲覧

javascriptで記述したブックマークレットの機能の一部として、任意のキーを押したときにだけ処理を実行/停止させたい

qonoha

総合スコア17

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/12/11 16:24

お世話になります。
実現したいことははっきりしているのですが、javascriptを触るのが初めてでして、
下記コードをブックマークレットとして動かした場合に、else if以降の処理(vを押した後にcを押した場合)
がなされずに困っております。

javascript

1document.body.addEventListener('keydown', 2 event => { 3 if (event.key === 'v' ) { 4 var m;if(!m){m=setInterval(function(s){scrollBy(0,s||2)},10)} 5 else if(event.key === 'c') { 6 clearInterval(m);m=0} 7 }})

中心となる元々の処理は、

javascript

1javascript:var m;if(!m){m=setInterval(function(s){scrollBy(0,s||2)},10)}else{clearInterval(m);m=0} 2```です。 3これのelseをelse ifに書き換え、キー操作を受け付けてくれそうな感じに書き換えたつもりでいるのですが、 4実際にブックマークレット(Chrome)として動かしてみると、vで動かした後にCを押した場合の処理がなされません。 5 6ただし、 7```javascript 8document.body.addEventListener('keydown', 9 event => { 10 if (event.key === 'v' ) { 11 console.log("Vが押されました")} 12 else if(event.key === 'c') { 13 console.log("Cが押されました")} 14 })

ですと、VやCを押したログがきちんと残ります。

蛇足ですが、

javascript

1document.body.addEventListener('keydown', 2 event => { 3 if (event.key === 'v' ) { 4 var m;if(!m){m=setInterval(function(s){scrollBy(0,s||2)},10)} 5 else if(event.key === 'c') { 6 m=setInterval(function(s){scrollBy(0,s||0)},0)} 7 }})

として、処理部分を0にするよう書き直しても、処理(vを押した後にcを押した場合)がなされませんでした。

根本的に何かを間違えているかもしれず、大変お手数をおかけ致しますが、
else if以降の処理(vで動かした後にcで止める処理)につきご教示下さい。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

変数 m のスコープは、event => { の関数内です。この関数が呼ばれる度に別の変数になります。

変数 m をグローバルスコープにする必要があります。document.body.addEventListener()の外で宣言するということです。

投稿2021/12/11 16:34

int32_t

総合スコア21020

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qonoha

2021/12/11 23:55

早速のご回答をありがとうございます。アドバイスに基づき、取り組んでみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問