2013-04-20 54 views
0

上可见这个问题是基于关闭这个优秀的StackOverflow元素可视性检测脚本的触发功能只有一次:jQuery的:每次当元素变得

Check if element is visible after scrolling

使用上面的脚本,我能正确检测页面上的元素何时可见(通过滚动到该元素),以便随后触发警报。我看起来不能从上面的脚本中编写代码的区别在于,我希望警报在每次元素可见时仅触发一次。随着下面的jsfiddle代码,警报将继续与每鼠标或滚动条的每一个滚动来触发,而元素可见:

http://jsfiddle.net/Berklie/JnFqu/

function isScrolledIntoView(elem) { 
    var docViewTop = $(window).scrollTop(); 
    var docViewBottom = docViewTop + $(window).height(); 

    var elemTop = $(elem).offset().top; 
    var elemBottom = elemTop + $(elem).height(); 

    return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); 
} 

$(window).scroll(function() { 
    var myelement = $('#overdueWarning'); 

    if (isScrolledIntoView(myelement)) { 
    alert('Your book is overdue'); 
    } 
}); 

我要的是报警只有一次触发当元素变得可见时...然后再次只有如果元素变得不可见,则再次可见。

请让我知道,如果我可以提供其他的东西。谢谢!

Berklie在你张贴的jsfiddle

回答

2

jsFiddle Working Demo

var shown = false; 
$(window).scroll(function() { 
    var myelement = $('#overdueWarning'); 
    if(isScrolledIntoView(myelement)){ 
     if(!shown){ 
     console.log('Your book is overdue'); 
     } 
     shown = true; 
    } 
    else{ 
    shown = false; 
    } 
}); 
+0

什么也没有发生(无警报触发)。你能检查你的jsFiddle吗? 此外,您的上面的代码是否允许警报在元素再次显示后再次触发(在某人完全向下滚动,然后再次备份之后)。如果元素是可见的,我希望它重新触发。谢谢。 – Berklie 2013-04-20 21:28:10

+0

好的...我所要做的就是编辑“console.log”到“alert”,它就起作用了。让我测试一下我的网站代码,然后回来指定它作为答案。谢谢。 – Berklie 2013-04-20 21:31:32

+0

与警报 - http://jsfiddle.net/mohammadAdil/JnFqu/15/ ----是的,如果元素再次显示,你会得到警报---将重新触发。 – 2013-04-20 21:31:40