2011-01-12 15 views
26

Projektuję bardzo prostą stronę WWW (tylko HTML), jedyną "cechą", którą chcę zaimplementować, jest zrobienie czegoś, gdy użytkownik przewinie stronę, czy istnieje sposób na uchwycenie tego "zdarzenia" w jakiś sposób?Przechwytywanie zdarzenia "przewiń w dół"?

Odpowiedz

16

Tylko dla kompletności, istnieje inne rozwiązanie używając innej ramy JS (MooTools)

window.addEvent('scroll',function(e) { 
    //do stuff 
}); 
+1

nie używając 'window.addEventListener (" scroll ", function (e) {...});'? Z powodu dodatkowych 8 liter? –

+1

Bo w ten sposób (mootools 'way) wspierasz (ed) także IE <9 (attachEvent stuff) ... – stecb

+0

Więc to modyfikuje 'prototyp' okna '? –

22

Nie możesz tego zrobić za pomocą samego HTML, musisz użyć Javascript. Polecam używanie jQuery, dzięki czemu rozwiązanie może wyglądać następująco:

$(document).ready(function() { 
    $(window).scroll(function() { 
     // do whatever you need here. 
    }); 
}); 

Jeśli nie chcą lub nie są w stanie korzystać z jQuery można użyć roztworu onscroll zamieszczonych przez Antoniego.

+0

Chyba szuka tylko przewijania w dół, nie przewija w górę. czy jest tam tylko coś do przewijania w dół. –

37

Jeśli nie chcesz używać jQuery (która nie może zrobić dla bardzo prostej strony HTML), można tego dokonać przy użyciu zwykłego Javascript:

<script> 
function scrollFunction() { 
    // do your stuff here; 
} 

window.onscroll = scrollFunction; 
</script> 

Wspomniałeś, że chcesz coś zrobić po przewinięciu strony - zdarzenie onscroll wyłącza się przewijając w dowolnym kierunku, na osi X lub Y, aby Twoja funkcja była wywoływana przy każdym przewijaniu.

Jeśli naprawdę chcesz, aby uruchamiał kod tylko podczas przewijania strony, musisz zachować poprzednią pozycję przewijania, aby porównać z każdym wywołaniem funkcji onscroll.

+3

Powinien używać 'attachEvent' (IE) i' addEventListener' (wszystko inne) prawdopodobnie zamiast 'onscroll'. – crush

+0

@crush, Dlaczego warto używać attachEvent i addEventListener zamiast onscroll? – Pacerier

+1

@Pacerier Okay, pozwól mi wrócić do tego komentarza, ponieważ jest on wprowadzający w błąd i opiera się na błędnych informacjach, które zdobyłem i które są propagowane w Internecie. Zgodnie ze specyfikacją [W3C HTML5] (http://www.w3.org/TR/html5/webappapis.html#event-handlers-on-elements--document-objects--and-window-objects) istnieje nic złego w używaniu 'onscroll'. Należy pamiętać, że 'onscroll' w szczególności nie istniał w [specyfikacji HTML4] (http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.3). – crush

11

Lepszym sposobem jest nie tylko sprawdzić zdarzeń przewijania, ale także dla kierunku przewijania jak poniżej;

$(window).bind('mousewheel', function(event) { 
if (event.originalEvent.wheelDelta >= 0) { 
    console.log('Scroll up'); 
} 
else { 
    console.log('Scroll down'); 
} 
}); 
+2

To powinna być poprawna odpowiedź. –

+0

Co zrobić, jeśli nie używasz kółka myszy do przewijania lub używasz urządzenia dotykowego? – HyderA

+0

@hydeA różne urządzenia reagują inaczej. Do tego może być konieczne użycie wtyczki takiej jak hammerjs lub coś podobnego. W przeciwnym razie myślę, że to odpowiedź została tutaj http://stackoverflow.com/questions/2863547/javascript-scroll-event-for-iphone-ipad –

0

To działa dla mnie.

var previousPosition 

$(window).scroll(function(){ 
    var currentScrollPosition=$(window).scrollTop() + $(window).height() 
    if (currentScrollPosition>previousScrollPosition) { 
    console.log('down') 
    }else if(currentScrollPosition<previousScrollPosition){ 
    console.log('up') 
    } 
    previousScrollPosition=currentScrollPosition 
}); 
Powiązane problemy