2017-01-05 19 views
5

W Chrome, jeśli mam onscroll Handler:Czy gwarantuje się, że wydarzenie "przewijania" zostanie uruchomione podczas przewijania programowego?

document.body.onscroll = function() {console.log('foo')} 

... i przewijać dokument programowo:

document.body.scrollTop = 7 

... wtedy onscroll Wózek pożary.

Czy mogę polegać na tym zachowaniu w różnych przeglądarkach, czy niektóre z nich podpalą jedynie funkcję przewijania spowodowaną działaniem użytkownika? Czy jest to nigdzie widoczne?

+0

Czy odnosisz się ściśle do ustawienia 'scrollTop'? Może to (miejmy nadzieję) być pomocne ... https://drafts.csswg.org/cssom-view/#dom-element-scrolltop – Dom

+0

@Dom Niekoniecznie - wyobrażam sobie, że 'scrollLeft' ma takie samo działanie. Czemu? Jakie jest znaczenie linku do specyfikacji? –

+0

Mój błąd, podałem link do 'scrollTop' zamiast linku' onscroll'. MDN udostępnia ich [tabelę zgodności przeglądarki] (https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onscroll#Browser_Compatibility), ale to pokazuje tylko obsługę krawędzi/chrome, inne są wciąż nieokreślone . Natrafiłem na [W3C's UI Events Spec] (https://w3c.github.io/uievents/#event-type-scroll), ale jego status jest przestarzały. Będę publikować wszelkie odpowiednie specyfikacje, jeśli natknę się na jeden. – Dom

Odpowiedz

0

ja nadal nie wiem, co (jeśli cokolwiek) Spec mówi na ten temat, ale mam teraz testowane i potwierdziły, że procedura obsługi robi pożar w najnowszych wersjach:

  • Chrome (stacjonarny)
  • Chrome (telefon)
  • Firefox
  • Krawędź
  • Safari (pulpit)

Jeśli istnieje platforma, którą chcesz przetestować, otwórz na niej kod https://jsfiddle.net/14nckcw1/4/embedded/result/ i poczekaj; jeśli zobaczysz alert po 1 sekundzie, programowe przewijanie uruchamia obsługę onscroll na tej platformie. Nie wiem nigdzie, nie jest to prawdą.