Three.js OrbitControls如何防止Vivaldi更改页面?

时间:2018-11-05 23:47:05

标签: three.js event-listener vivaldi orbit-controls

我最近在笔记本电脑上试用了Vivaldi浏览器,以运行一些自建的THREE.js应用程序。该应用程序在Vivaldi上的运行速度比我通常使用的Opera或Firefox快得多。

但是我发现了一个问题。使用Orbit Controls并尝试使用鼠标右键单击并拖动时移动(平移)摄影机视点时。在Opera和Firefox中可以正常工作。但是在Vivaldi中,向左或向右拖动有时会导致浏览器移至上一页或下一页。在调试器中,我收到一条消息“在被动事件侦听器调用中无法阻止Default”。

我最初的addEventListener初始化代码是这样的:-

document.addEventListener( 'touchstart', onDocumentTouchStart,false  ); 
document.addEventListener( 'touchmove', onDocumentTouchMove, false );
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
window.addEventListener  ( 'resize', onWindowResize, false );   

相关的调用代码如下:-

//... Allows OrbitControls to do drag origin by preventing default reaction (prev/next page)
function onDocumentTouchStart( event ) {
    if ( event.touches.length === 1 ) {
        event.preventDefault();
        mouseX = event.touches[ 0 ].pageX - windowHalfX;
        mouseY = event.touches[ 0 ].pageY - windowHalfY;
    }
}
//... Allows OrbitControls to do drag origin by preventing default reaction (prev/next page)
function onDocumentTouchMove( event ) {
    if ( event.touches.length === 1 ) {
        event.preventDefault();
        mouseX = event.touches[ 0 ].pageX - windowHalfX;
        mouseY = event.touches[ 0 ].pageY - windowHalfY;
    }
}

我点击了提供给https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener的链接,并将初始化代码更改为以下内容:-

var passiveSupported = false;

try 
{
  var options = {
    get passive() { // This function will be called when the browser
                    //     attempts to access the passive property.
      passiveSupported = true;
    }
};

  window.addEventListener("test", options, options);
  window.removeEventListener("test", options, options);


} 
catch(err) 
{
  passiveSupported = false;
}   
//MY MODIFIED STUFF
    document.addEventListener( 'touchstart', onDocumentTouchStart, passiveSupported
                               ? { passive: true } : false);
    document.addEventListener( 'touchmove', onDocumentTouchMove, passiveSupported
                               ? { passive: true } : false);
    document.addEventListener( 'mousemove', onDocumentMouseMove, options );
    window.addEventListener  ( 'resize', onWindowResize, options ); 

现在,维瓦尔第报告说,passiveSupported = true,但是错误消息和问题仍然存在。

如果有人想了解一下这里发生的事情,我将不胜感激,因为我想使用Vivaldi,但此页面跳转问题使我的某些应用无法使用。

0 个答案:

没有答案