2015-03-03 25 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

相关问题