2011-01-12 42 views
26

Tôi đang thiết kế một trang web rất đơn giản (chỉ HTML), "tính năng" duy nhất tôi muốn thực hiện là làm điều gì đó khi người dùng cuộn xuống trang, có cách nào để nắm bắt "sự kiện" đó không?Chụp sự kiện "cuộn xuống"?

Trả lời

16

Chỉ cần cho đầy đủ, có một giải pháp sử dụng một khuôn khổ JS (Mootools)

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

Tại sao không sử dụng 'window.addEventListener (" scroll ", function (e) {...});'? Vì có thêm 8 chữ cái? –

+1

Bởi vì theo cách đó (mootools 'way) bạn hỗ trợ (ed) cũng IE <9 (attachEvent stuff) ... – stecb

+0

Vì vậy, nó sửa đổi 'nguyên mẫu' của cửa sổ'? –

22

Bạn không thể làm điều đó chỉ với HTML, bạn sẽ cần phải sử dụng Javascript. Tôi khuyên bạn nên sử dụng jQuery, vì vậy giải pháp của bạn có thể trông như thế này:

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

Nếu bạn không muốn hoặc không thể sử dụng jQuery, bạn có thể sử dụng giải pháp onscroll đăng bởi Anthony.

+0

Tôi đoán anh ấy đang tìm kiếm chỉ cuộn xuống không cuộn lên. có gì để cuộn xuống không. –

37

Nếu bạn không muốn sử dụng jQuery (mà bạn có thể không làm cho một trang HTML rất đơn giản), bạn có thể thực hiện điều này sử dụng thường xuyên Javascript:

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

window.onscroll = scrollFunction; 
</script> 

Bạn nói rằng bạn muốn làm điều gì đó khi họ cuộn xuống trang - sự kiện trên máy bay sẽ kích hoạt cuộn theo bất kỳ hướng nào, trong trục x hoặc trục y, do đó chức năng của bạn sẽ được gọi bất kỳ lúc nào chúng cuộn.

Nếu bạn thực sự muốn nó chỉ chạy mã của bạn khi họ cuộn xuống trang, bạn cần phải giữ nguyên vị trí cuộn trước đó để so sánh với bất kỳ khi nào cuộn được gọi.

+3

Nên sử dụng 'attachEvent' (IE) và' addEventListener' (mọi thứ khác) có thể thay vì 'onscroll'. – crush

+0

@crush, Tại sao sử dụng attachEvent và addEventListener thay vì onscroll? – Pacerier

+1

@Pacerier Được rồi, hãy để tôi xem lại nhận xét này vì nó gây hiểu lầm và dựa trên thông tin bị lỗi mà tôi thu được và đang được truyền bá trên Internet. Theo [đặc tả HTML5 của W3C] (http://www.w3.org/TR/html5/webappapis.html#event-handlers-on-elements,-document-objects,-and-window-objects), có không có gì sai khi sử dụng 'onscroll'. Điều quan trọng cần lưu ý là 'onscroll' cụ thể, không tồn tại trong [HTML4 specification] (http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.3). – crush

11

Cách tốt hơn là không chỉ kiểm tra các sự kiện cuộn mà còn cho hướng di chuyển như dưới đây;

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

Đây phải là câu trả lời đúng. –

+0

Nếu bạn không sử dụng con lăn chuột để cuộn hoặc bạn sử dụng thiết bị cảm ứng thì sao? – HyderA

+0

@hydeA Các thiết bị khác nhau phản ứng khác nhau. Đối với điều này, bạn có thể phải sử dụng một plugin như hammerjs hoặc một cái gì đó tương tự. Nếu không tôi nghĩ rằng điều này đã được trả lời ở đây http://stackoverflow.com/questions/2863547/javascript-scroll-event-for-iphone-ipad –

0

Điều này phù hợp với tôi.

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 
}); 
Các vấn đề liên quan