2015-04-15 21 views
5

Im sử dụng jquery.visible.js để phát hiện khi một DIV ở chế độ xem (nó bắt đầu hoạt ảnh khi cắm vào có hiệu ứng hoạt hình vòng tròn). Nhưng nó tiếp tục bắn mỗi khi tôi sử dụng bánh xe cuộn, nhân bản thân vô thời hạn và tôi không thể tìm thấy một cách để ngăn chặn nó với off() hoặc unbind()? cảm ơn!Làm thế nào để dừng di chuyển() kích hoạt các sự kiện nhiều lần

// Check vertical for circliful using jquery.visible.js 
$(window).scroll(function(){ 
    if ($("#moreSection").visible(true)){ 


     // trigger circliful 
     $('#myStat-1').circliful() // this wont stop firing 

} 
}); 
+0

thử $ (cửa sổ) .off() – vaskort

+0

Cả hai câu trả lời đều có thông tin không chính xác, cuộn không kích hoạt trên pixel nhưng trên tỷ lệ khung hình hiển thị. http://codepen.io/anon/pen/xbNOdG?editors=001 – Shikkediel

+0

cảm ơn Shikkedial, rất thú vị để biết – user3358014

Trả lời

3

như #Shikkediel chỉ ra scroll() bị sa thải vào những thay đổi tỷ lệ khung hình. vì vậy mọi cuộn giấy có thể kích hoạt hàng trăm lần.

bạn có thể làm điều này:

$(window).scroll(function(){ 
    if ($("#moreSection").visible(true)){ 
     doActionAndStopScript(); 
    } 
}); 

function doActionAndStopScript(){ 
    $('#myStat-1').circliful() // now it will fire once 
    $(window).unbind('scroll'); 
} 

bạn chỉ có thể gọi unbind() từ bên ngoài $(window)

+0

hi Aryeh, vâng tôi cần nó để chỉ một lần khi nó cuộn vào xem và sau đó người nghe sự kiện bị phá hủy nếu có thể - im sử dụng jquery.visible.js để kiểm tra chế độ xem – user3358014

+0

khi nội dung được cuộn trong chế độ xem? một phần nào đó của trang? –

+0

cũng trước khi tôi sử dụng một plugin cuộn dectioned và nó giết nó với điều này: $ ('div'). Unbind ('inview'); – user3358014

3

Sự kiện scroll sẽ cháy một lần cho mỗi pixel được cuộn. Để khắc phục hành vi này, bạn có thể sử dụng bộ hẹn giờ sẽ chỉ thực hiện logic sau khi di chuyển của bạn đã dừng trong x mili giây. Hãy thử điều này:

var timer; 
$(window).scroll(function() { 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
     if ($("#moreSection").visible(true)){ 
      $('#myStat-1').circliful(); 
     } 
    }, 250); 
}); 

250ms thường đủ dài để chờ để kích hoạt mã của bạn. Bạn có thể điều chỉnh giá trị này theo yêu cầu.

+0

hi there Rory, cảm ơn vì sự giúp đỡ, nhưng nó vẫn sẽ không dừng lại, im gonna tải lên trang web trong một vài giây .. – user3358014

+0

Hi Rory, anh ấy là trang web bây giờ: http://www.joewebsitedesigner.co.uk/test/ – user3358014

+0

Tuyệt vời, tôi sử dụng phương pháp này với độ trễ 100ms, sự kiện cuộn vẫn chỉ được kích hoạt một lần. –

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