Я недавно попробовал браузер Vivaldi на своем ноутбуке для запуска некоторых собственных приложений THREE.js. Приложение работает намного быстрее на Вивальди, чем на Opera, которую я обычно использую, или на Firefox.
Я нашел проблему, хотя. При использовании элементов управления орбитой и попытке переместить (перевести) точку обзора камеры, используя правую кнопку мыши, щелчок + перетаскивание Это хорошо работает в Opera и Firefox. Но в Вивальди перетаскивание влево или вправо иногда заставляет браузер переходить на предыдущую или следующую страницу. В отладчике я получил сообщение «Невозможно предотвратить дефолт внутри вызова пассивного прослушивателя событий».
Мой исходный код инициализации 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, но из-за этой проблемы с перелистыванием страниц это невозможно для некоторых моих приложений.