2011-06-23 39 views
5

Có cách nào để ngăn không cho $(window).scroll() kích hoạt khi tải trang không?

Kiểm tra mã sau trong Firefox 4, nó sẽ kích hoạt ngay cả khi tôi rút chuột.

jQuery(document).ready(function($){  
$(window).scroll(function(){ 
       console.log("Scroll Fired"); 
    }); 
}); 
+0

bất kỳ ví dụ nơi nào bạn cần để ngăn chặn di chuyển? – genesis

+0

Tôi chỉ cần ngăn sự kiện cuộn được kích hoạt khi không di chuyển. –

+2

Cẩn thận hooking bất cứ điều gì cho sự kiện cuộn cửa sổ http://ejohn.org/blog/learning-from-twitter/ – redsquare

Trả lời

9

Sự kiện scroll không liên quan đến chuột, nó được gọi bất cứ khi nào vị trí cuộn tài liệu mới được đặt. Và cho rằng vị trí được đặt khi tài liệu tải (bạn có thể tải nó bằng một neo sau khi tất cả), cũng nếu người dùng nhấn một phím con trỏ trên bàn phím của mình. Tôi không biết tại sao bạn cần phải bỏ qua sự kiện scroll ban đầu nhưng tôi đoán rằng bạn chỉ muốn làm điều đó nếu pageYOffset bằng không. Đó là dễ dàng:

var oldPageYOffset = 0; 
$(window).scroll(function(){ 
    if (window.pageYOffset != oldPageYOffset) 
    { 
    oldPageYOffset = window.pageYOffset; 
    console.log("Window scrolling changed"); 
    } 
}); 

Note: MSIE không có window.pageYOffset tài sản như vậy ở trên sẽ cần phải được điều chỉnh. Có lẽ jQuery cung cấp một thay thế trình duyệt chéo.

+0

Điều này gần như ở đó, tôi chỉ cần ngăn chặn lần chạy đầu tiên! –

+3

@Mild Fuzz: Bạn sẽ nhận được câu trả lời tốt hơn nếu bạn giải thích những gì bạn muốn đạt được thay vì cách bạn muốn đạt được nó. nghĩ rằng bỏ qua sự kiện cuộn đầu tiên là giải pháp tốt nhất cho bạn, nhưng điều đó có thể không phải là trường hợp (và không thể nói nếu bạn không cung cấp thêm thông tin). Dù bằng cách nào, bạn cũng có thể khởi tạo 'oldPageYOffset' bằng' window.pageYOffset 'nếu bạn hoàn toàn muốn bỏ qua sự kiện' cuộn' ban đầu. –

0

chắc chắn, không tải nó cho đến sau khi tải. làm cho nó một cuộc gọi trở lại cho giấc ngủ cho 500 millis.

+0

nó không phải là, mã trên được nạp trong 'jQuery (tài liệu) .ready (function ($) { ' –

+0

được thêm vào mã ví dụ –

6

Đây là giải pháp tôi đã thực hiện. Bất kỳ cải tiến nào cũng biết ơn.

var scroll = 0; 
    $(window).scroll(function(){ 
        if (scroll>0){ 
        console.log("Scroll Fired"); 
        } 
        scroll++; 
    }); 
+0

Giải pháp tốt!) – Steve

3

Sự kiện cuộn không kích hoạt trên mọi tải, chỉ khi làm mới trang được cuộn hoặc khi điều hướng trực tiếp đến một neo.

Nhiều câu trả lời gợi ý bỏ qua lần đầu tiên nó được gọi, điều này sẽ bỏ qua một cuộn hợp lệ nếu trang không được cuộn đầu tiên.

//Scroll the page and then reload just the iframe (right click, reload frame) 
 

 

 
//Timeout of 1 was not reliable, 10 seemed to be where I tested it, but again, this is not very elegant. 
 
//This will not fire initially 
 
setTimeout(function(){ 
 
    $(window).scroll(function(){ 
 
    console.log('delayed scroll handler'); 
 
    }); 
 
}, 10); 
 

 
//This will fire initially when reloading the page and re-establishing the scroll position 
 
$(window).scroll(function(){ 
 
    console.log('regular scroll handler'); 
 
});
div { 
 
    height: 2000px; 
 
    border: 1px solid red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
</div>

Các vấn đề liên quan