前提・実現したいこと
マウスを画面内でドラッグして、その方向に速度dzを加速or減速したい。
発生している問題・エラーメッセージ
エラーは出ませんでした。
問題はmouseup後もmousemoveの処理が継続されたのかdxの値、それに伴いdzの値がカーソルの素の動きに応じて変動することです。
mouse.yの値は再びmousedownするまでそのままの値でした。
該当のソースコード
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1"/> 5 <title>My Project</title> 6</head> 7<body> 8 <div id="stage"></div> 9 <script src="js/three.min.js"></script> 10 <script src="js/main.js"></script> 11</body> 12</html>
javascript
1 const stage = document.getElementById('stage'); 2 let dz = 0; 3 const mouse = new THREE.Vector2(); 4 5 stage.addEventListener('mousedown', (e) => { 6 const rect = e.target.getBoundingClientRect(); 7 mouse.y = (e.clientY - rect.top) / height * -1 * 2 + 1; 8 9 stage.addEventListener('mousemove', element => { 10 dragging(width, height, mouse.y, element, rect); 11 }); 12 }); 13 14 stage.addEventListener('mouseup', () => { 15 stage.removeEventListener('mousemove', element => { 16 dragging(width, height, mouse.y, element, rect); 17 }); 18 }); 19 20 21 function dragging(width, height, mouseY, element, rect) { 22 console.log('mouseY: ' + mouseY); ////////// 23 const dragMouseY = (element.clientY - rect.top) / height * -1 * 2 + 1; 24 const dx = dragMouseY - mouseY; 25 console.log('dx: ' + dx); ////////// 26 dz += dx / 100; // 加速 27 console.log('dz: ' + dz); ////////// 28 }
試したこと
- 該当コードのように /////////のついた行にmouse.yとdxとdzの値を出力
- 下記コードの第二引数をdraggingに → 同症状
stage.removeEventListener('mousemove', element => { dragging(width, height, mouse.y, element, rect); });
補足情報(FW/ツールのバージョンなど)
dotinstallのローカル開発環境の構築 [macOS編]
をお手本に環境構築
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/22 07:36
2020/03/22 08:11