0

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

不过我发现了一个问题。当使用 Orbit Controls 并尝试使用鼠标右键单击 + 拖动来移动(平移)相机视点时。这在 Opera 和 Firefox 中运行良好。但在 Vivaldi 中,向左或向右拖动有时会导致浏览器移动到上一页或下一页。在调试器中,我收到一条消息“无法在被动事件侦听器调用中阻止默认设置”。

我原来的 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 ); 

现在 Vivaldi 报告 passiveSupported = true 但错误消息和问题仍然存在。

如果有人能阐明这里发生的事情,我将不胜感激,因为我想使用 Vivaldi,但这个页面跳转问题使其无法用于我的某些应用程序。

4

0 回答 0