什么'这是跟踪用户向下滚动页面的最实用的方法
What's the most pragmatic way to keep track of how far down the page a user has scrolled?
我现在正在建立一个网站,在那里可以在滚动中触发一堆动画和图形事件(你知道其中的一些很有趣)。我正试着决定如何测量滚动到页面下方的距离。
选项一,以像素为单位测量并触发事件:
$(document).scroll(function(){
var scrolllength = $(window).scrollTop()
switch(key) {
case 84:
foo();
break;
case 185:
bar();
break;
default:
return;
}
优点:可能更快
缺点:如果任何东西的高度发生变化,我必须手动测量和更新。这是一个静态的静坐,但我确实希望有很多调整和修补。
选项二,跟踪DOM元素。
$(document).scroll(function(){
//this will be a bunch of differnt ones but for example
if(isScrolledIntoView('#div'){
$('body').css('background','black');
}
}
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));
}
优点:动态的、与内容无关的
缺点:由于每次触发滚动都会触发,我担心这种方法会使滚动变得不平滑。我至少要检查20件这种性质的东西。页面将被划分为不同的部分,也许我可以先检查哪个部分是可见的,然后再检查该特定部分中的项目。
我当然对更多的选择持开放态度!
一个选项是在脚本开始时存储所需div的偏移量:
var triggerone = $("#whateverdiv").offset().top;
var triggertwo = $("#whateverotherdiv").offset().top;
$(document).scroll(function(){
var scrolllength = $(window).scrollTop()
switch(scrolllength) {
case triggerone:
foo();
break;
case triggertwo:
bar();
break;
default:
return;
}
}
这将第二种解决方案的易维护性与第一种解决方案(近似)的速度相结合。
答案不错。学习的东西。
我做了一个小小提琴链接
switch
语句的问题在于它检查等式,并且用户通常保持滚动。无论如何,我无法通过开关使其工作,所以我使用了不等式。
相关文章:
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- jquery:将动画绑定到滚动条位置的更好方法
- 有没有一种方法可以直接从cordova获得滚动位置
- 使用 JavaScript 方法滚动
- VirtualScroll rowRenderer方法在滚动时被调用多次
- 滚动事件运行缓慢-有没有更轻松的方法
- 我需要一个带有可滚动正文的固定表头.我已经尝试了所有方法,但它似乎不起作用
- Jquery$(window).scrollTop();方法是滚动到页面的特定位置,然后在页面顶部再次滚动
- 通用化 jQuery 滚动方法
- 是否有任何跨浏览器方法可以获取带有滚动条的 DIV 宽度(如果存在)
- 从jQuery/JavaScript实现滚动的替代方法
- 安卓浏览器上的滚动事件未触发.需要解决方法
- 用于捕获滚动事件的跨浏览器方法(或暂时禁用滚动的更简单方法)
- Facebook找到了一种解决移动滚动的方法
- 使用ScrollPath jQuery插件,当它击中某个元素时暂停滚动的任何方法
- 在没有jquery的情况下自动滚动到以前位置的最佳方法(PHP和Javascript)
- Android驱动程序的scrollTo和scrollToExact 方法的问题.方法不会滚动到所需的元素文本,而是滚动
- 防止在内部 JavaScript 函数中滚动到顶部的任何方法
- jQuery滚动方法不工作
- 当一个方法被调用时,Mootools滚动方法应该自动调用