2015-03-03 71 views
0

我在$(window).scroll中有一些代碼檢查一個元素是否可見,然後觸發另一個函數。

但是,只有第一部分的代碼是射擊。這兩個代碼都可以自行工作 - 如果我交換他們的順序,無論哪一個在頂部正確觸發。

我的代碼如下:

$.fn.isOnScreen = function() { 
"use strict"; 
var win = $(window), viewport = { 
    top: win.scrollTop(), 
    left: win.scrollLeft() 
}, bounds = this.offset(); 
viewport.right = viewport.left + win.width(); 
viewport.bottom = viewport.top + win.height(); 
bounds.right = bounds.left + this.outerWidth(); 
bounds.bottom = bounds.top + this.outerHeight(); 
return !(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom); 
}; 

$(window).scroll(function() { 
"use strict"; 

var load_more_results = $("#ajax-load_more_results").isOnScreen(); 
if (load_more_results === true) {LoadMoreResults();} 

var load_more_staff = $("#ajax-load_more_staff").isOnScreen(); 
if (load_more_staff === true) {LoadMoreStaff();} 
}); 

我在做什麼錯?你只能從$(window).scroll發起一個事件嗎?我不假設。

+0

您是否在控制檯中看到任何錯誤消息?我很確定這個錯誤在'LoadMoreResults'和'LoadMoreStaff'函數中。 – 2015-03-03 08:49:02

+1

每個用戶滾動滾動事件不止一次(實際上很多,取決於瀏覽器)。我沒有看到任何明顯錯誤的東西。你能提供一個可以重現問題的jsfiddle嗎? – peterdotjs 2015-03-03 08:49:09

+0

jsfiddle將很好的看待問題 – mohamedrias 2015-03-03 08:54:30

回答

0

修正了它 - 答案非常簡單。 JS代碼位於我的中央js文件中,每個頁面都會觸發該文件。帶有這些ID的DIV只出現在某些頁面上,如果DIV根本不存在,則代碼失敗。

我通過將這些事件僅移動到包含這些DIV的頁面來解決此問題。感謝JSFiddle的@ t.niese,這讓我意識到這一點。

+0

但是你應該看到一個錯誤信息,比如'Uncaught TypeError:Can not read'left'of undefined' – 2015-03-03 10:07:16

+0

我*可能已經忘記檢查錯誤控制檯。 – BFWebAdmin 2015-03-03 11:14:08