やりたいこと
疑似コピー機能として、ブラウザ上で文字列がselectされて、かつcmdキー+Cキーが押された時に、javascriptの変数に格納しようとしています。
添付したコードは以下のような動作をさせようとしています。
- selectイベントが起きたらselectされている文字列を変数”selectedText”に格納
- cmdキーとcキーのkeydownを確認したら、変数”copiedText”に”selectedText”を格納
現状
1,2共に単独だと動きますが、何か文字列をselectしていると2の動作ができません
何かイベントが行われている最中では、他のイベントは認識されないのでしょうか?
また解決策を教えていただきたいです。
普段はPythonを書いており、javascriptは初心者です。
OSはmacでブラウザはChromeです。
よろしくお願いいたします。
javascript
1window.addEventListener("select",selectText, false); 2window.addEventListener("keydown",pressFunction, false); 3window.addEventListener("keyup",releaseFunction, false); 4function selectText(){ 5 var selectedText = document.getSelection().toString(); 6 return selectedText 7} 8var keyStatus = {}; 9// キーを押されたら実行する処理 10function pressFunction(e,selectedText) 11{ 12 keyStatus[e.keyCode] = true; // 該当のキーコードをtrueにする 13 if(keyStatus[91] && keyStatus[67]) { // cmdとC両方trueなら 14 var copiedText = selectedText; 15 } 16} 17// キーが離されたら実行する処理 18function releaseFunction(e) 19{ 20 keyStatus[e.keyCode] = false; // 該当のキーコードをfalseにする 21}
追記
javascript
1 var keyStatus = {}; 2 var listener = {selectedText: '', handleEvent: function handleEvent (e) { 3 // e.preventDefault(); 4 switch(e.type){ 5 case "select": 6 var selectedText = document.getSelection().toString(); 7 console.log(selectedText); 8 break; 9 10 case "keydown": 11 keyStatus[e.keyCode] = true; // 該当のキーコードをtrueにする 12 console.log(e.keyCode); 13 if(keyStatus[91] && keyStatus[67]) { // cmdとC両方trueなら 14 console.log(selectedText); 15 var copiedText = selectedText; 16 console.log(copiedText); 17 } 18 break; 19 case "keyup": 20 keyStatus[e.keyCode] = false; 21 break; 22 } 23 }};
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/29 05:52 編集
2019/08/29 10:33