Three.js OrbitControls как помешать Вивальди изменить страницу? - PullRequest
0 голосов
/ 06 ноября 2018

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

...