Three.js OrbitControls как помешать Вивальди изменить страницу?
Недавно я попробовал браузер 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, но эта проблема со скачком страницы делает его непригодным для некоторых моих приложений.