如何检测页面滚动到jQuery中的某个点?
想象一下,这是我的网页:
<p>hello</p> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <p class="myPara">My Paragraph</p>
当用户向下滚动到类“myPara”的段落时,我该如何警告一条消息?
怎么样:
var target = $(".myPara").offset().top; var interval = setInterval(function() { if ($(window).scrollTop() >= target) { alert("made it!"); clearInterval(interval); } }, 250);
这是一个例子: http : //jsfiddle.net/andrewwhitaker/24M3n/1/
你可能会试图附加一个事件处理程序到窗口滚动事件,但约翰Resigbuild议反对它 (向下滚动到“最佳实践”)。
更新 : 正如@AbdulJabbarWebBestow指出 ,不必要的每250毫秒运行一个函数可能是一个坏主意。 下面是一个更新的示例,仅在用户第一次滚动后250ms运行一次:
var target = $(".mypara").offset().top, timeout = null; $(window).scroll(function () { if (!timeout) { timeout = setTimeout(function () { console.log('scroll'); clearTimeout(timeout); timeout = null; if ($(window).scrollTop() >= target) { alert('made it'); } }, 250); } });
例如: http : //jsfiddle.net/24M3n/858/
$(window).scroll(function(){ console.log($('#myPara').offset().top < $(this).height() + $(this).scrollTop()); });
我一直在考虑附加一个滚动事件的问题(由@AndrewWhitaker指出),我最后的想法是,没有必要每隔x秒添加一个scoll事件处理程序,因为您只需执行setInterval并签入是否应该显示警报的callback。 例如:
var showMessageInterval = window.setInterval(showMessageIfNeeded, 500); // you could adjust the interval to the animation duration of the // message showing. In this way, the delay will be more "natural"
showMessageIfNeeded
callback将检查scrollTop
值,并在需要时显示消息。 如果显示消息,则必须清除setInterval
以避免下一次执行:
function showMessageIfNeeded() { var scrollTop = $(window).scrollTop(); var targetTop = $(".myPara").offset().top; if (scrollTop > targetTop) { alert('Show message'); window.clearInterval(showMessageInterval); } }