前提・実現したいこと
Three.jsを利用し、360度動画を複数再生するWebサイトを作成しています。
メインで再生している動画にカメラの位置を変更するEventListnerを付与し、動画を切り替えた際に付与したイベントをremoveEventListenerで削除したいのですが削除できません
調査すると引数が異なることにより起こっているのかと推測していますが解決策あればご教授いただきたいです。
また、Three.jsで360度動画再生は下記ページを参考にさせていただきました。
https://sterfield.co.jp/designer/three-js%E3%81%A7360%E3%83%91%E3%83%8E%E3%83%A9%E3%83%9E%E5%8B%95%E7%94%BB%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/
該当のソースコード
JavaScript
1//イベントの振り分け 2var EVENT = {}; 3if ('ontouchstart' in window) { 4 EVENT.TOUCH_START = 'touchstart'; 5 EVENT.TOUCH_MOVE = 'touchmove'; 6 EVENT.TOUCH_END = 'touchend'; 7} else { 8 EVENT.TOUCH_START = 'mousedown'; 9 EVENT.TOUCH_MOVE = 'mousemove'; 10 EVENT.TOUCH_END = 'mouseup'; 11} 12 13var onMouseDownMouseX = 0, onMouseDownMouseY = 0, 14lon = 0, onMouseDownLon = 0, 15lat = 0, onMouseDownLat = 0, 16phi = 0, theta = 0; 17 18// 球体作成関数 19function createThreeDimVideo(elem, index){ 20 var camera, scene, renderer, video, texture, container; 21 22 init(); 23 tick(); 24 25 function init(){ 26 ... 省略 ... 27 // onDocumentMouseMoveでカメラの位置を変更するためeventとcameraを渡す 28 if(index == 0){ 29 renderer.domElement.addEventListener( EVENT.TOUCH_START, onDocumentMouseDown.bind(renderer.domElement, camera), false ); 30 } 31 ... 省略 ... 32 } 33 function onWindowResize () { 34 ... 省略 ... 35 } 36 function tick() { 37 ... 省略 ... 38 } 39};
JavaScript
1// 以下動画切り替え時に利用したいため関数として切り離す 2function onDocumentMouseDown( camera, event ) { 3 event.preventDefault(); 4 if(event.clientX) { 5 onMouseDownMouseX = event.clientX; 6 onMouseDownMouseY = event.clientY; 7 } else if(event.touches) { 8 onMouseDownMouseX = event.touches[0].clientX 9 onMouseDownMouseY = event.touches[0].clientY; 10 } else { 11 onMouseDownMouseX = event.changedTouches[0].clientX 12 onMouseDownMouseY = event.changedTouches[0].clientY 13 } 14 onMouseDownLon = lon; 15 onMouseDownLat = lat; 16 document.addEventListener( EVENT.TOUCH_MOVE, onDocumentMouseMove.bind(document, camera), false ); 17 document.addEventListener( EVENT.TOUCH_END, onDocumentMouseUp.bind(document, camera), false ); 18} 19function onDocumentMouseMove( camera, event ) { 20 event.preventDefault(); 21 if(event.clientX) { 22 var touchClientX = event.clientX; 23 var touchClientY = event.clientY; 24 } else if(event.touches) { 25 var touchClientX = event.touches[0].clientX 26 var touchClientY = event.touches[0].clientY; 27 } else { 28 var touchClientX = event.changedTouches[0].clientX 29 var touchClientY = event.changedTouches[0].clientY 30 } 31 lon = ( touchClientX - onMouseDownMouseX ) * -0.3 + onMouseDownLon; 32 lat = ( touchClientY - onMouseDownMouseY ) * -0.3 + onMouseDownLat; 33 34 lat = Math.max( - 85, Math.min( 85, lat ) ); 35 phi = THREE.Math.degToRad( 90 - lat ); 36 theta = THREE.Math.degToRad( lon ); 37 camera.position.x = 100 * Math.sin( phi ) * Math.cos( theta ); 38 camera.position.y = 100 * Math.cos( phi ); 39 camera.position.z = 100 * Math.sin( phi ) * Math.sin( theta ); 40 camera.lookAt( 0, 0, 0 ); 41} 42 43// onDocumentMouseMoveが削除されない 44 45function onDocumentMouseUp( camera, event ) { 46 document.removeEventListener( EVENT.TOUCH_MOVE, onDocumentMouseMove.bind(document, camera), false ); 47 document.removeEventListener( EVENT.TOUCH_END, onDocumentMouseUp.bind(document, camera), false ); 48} 49
JavaScript
1var elems = Array.from(document.getElementsByTagName('video')); 2elems.forEach(function(video, index){ 3 createThreeDimVideo(video, index); 4});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/26 01:12