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, но эта проблема со скачком страницы делает его непригодным для некоторых моих приложений.

0 ответов

Другие вопросы по тегам