我最近在笔记本电脑上试用了 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,但这个页面跳转问题使其无法用于我的某些应用程序。