Jquery 油门滚动事件以添加框阴影

Jquery 油门滚动事件以添加框阴影,jquery,performance,scroll,coffeescript,throttling,Jquery,Performance,Scroll,Coffeescript,Throttling,当我在页面上滚动一个元素时,我会在另一个指定的元素上添加一个阴影,以直观地向用户显示页面已滚动,通常是在查看长列表时 # HTML <header id="header"> header... </div> <main data-behavior="scroll-shadow" data-scroll-shadow-element="#header"> ... </main> # CoffeeScript using jQuery $("

当我在页面上滚动一个元素时,我会在另一个指定的元素上添加一个阴影,以直观地向用户显示页面已滚动,通常是在查看长列表时

# HTML
<header id="header">
  header...
</div>
<main data-behavior="scroll-shadow" data-scroll-shadow-element="#header">
  ...
</main>

# CoffeeScript using jQuery
$("[data-behavior~='scroll-shadow']").on "scroll", (e) ->
  $trigger = $(this)
  $target = $($trigger.attr("data-scroll-shadow-element"))

  if $trigger.scrollTop()
    $target.addClass("scroll-shadow-active")
  else
    $target.removeClass("scroll-shadow-active")
#HTML
标题。。。
...
#使用jQuery的CoffeeScript
$(“[data behavior~='scroll-shadow']”)。在“scroll”(滚动)上,(e)->
$trigger=$(此)
$target=$($trigger.attr(“数据滚动阴影元素”))
如果$trigger.scrollTop()
$target.addClass(“滚动阴影活动”)
其他的
$target.removeClass(“滚动阴影活动”)
这段代码工作得很好,它添加/删除了显示方框阴影的CSS类

但是,我知道,出于性能原因,将事件附加到scroll是一个坏主意

然而,当我研究这个问题时,我遇到了一些不同的解决方案,我不确定哪一个最适合这种类型的用例

Debouce

这似乎是可能的,因为它会抓取一组滚动事件并为这些组触发一次处理程序,所以不会每次都触发。然而,在用户停止滚动之前,这个解决方案似乎不会实际添加样式化的阴影。因此,如果用户在一个很长的列表中从上到下滚动,他们直到几秒钟后才会看到阴影

油门

这似乎是更好的方法,基本上只执行一定数量的事件,而不是每个事件(可能只有1/4的滚动事件实际触发处理程序)


因为我不是任何类型的JavaScript性能专家,所以我不确定有什么更好的选择。我还考虑将Lodash用作JS实用程序库,因为他们已经测试了节流/等的代码

对于这种特定类型的事件处理,节流是最佳的解决方案性能方面的吗?有哪些方法可以为滚动元素添加阴影,使其达到最佳效果?

我如何理解“去抖动事件”是有选择性的。。。而不是全部拿走

在scroll上,我通常选择第一个事件,而忽略其他事件。
从性能角度来看。。。因为在这里,这只是一个
addClass()
。但也有可能是其他不好的事情,反复打电话是不好的

所以我用了一个“旗子”或者像这里这样的计数器

然后,当用户完成滚动时,
setTimeout()
会重置该标志或计时器

var-shadowTarget;
var超时;
var-eventCount=0;
$(“[data behavior~='scroll-shadow']”)。在(“scroll”,function()上{
eventCount++;
if(eventCount==1){
触发器=$(此);
shadowTarget=$(trigger.attr(“数据滚动阴影元素”);
log(“添加类”);
addClass(“滚动阴影活动”);
}
//在每个滚动事件中设置新的超时。
clearTimeout(滚动超时);
scrollTimeout=setTimeout(函数(){
log(“删除类”);
shadowTarget.removeClass(“滚动阴影活动”);
eventCount=0;
},500);
});
标题{
背景色:青色;
}
主要{
溢出Y:滚动;
高度:600px;
}
。滚动阴影处于活动状态{
边框:1px纯红;
盒影:4px 4px 3px红色;
}

标题。。。

Lorem ipsum dolor sit amet,是一位杰出的献身者。埃尼安·索利西图丁·利奥·欧盟(leo-eu-bibendum aliquam)。这是一种暂时性的性行为。莫利斯先生,佩伦茨克先生,奥奇前庭先生,普鲁斯先生,您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。这是一个很好的例子。努克·帕特·莫里斯·塞德·拉齐尼亚门。法雷特拉·埃吉特·托托·内克·维尼纳提斯万岁。我的猫在这里过得很愉快。这是我的名言。没有时间,没有时间。马蒂斯酒后驾车,在。不要让你的眼睛睁得大大的。毛里斯是一位精英,而奥奇则是一位天才。

苏西比特阿尔库的艾米特·波苏尔·努克·森佩尔和普罗恩·尤伊斯莫德(amet posuere nunc semper et.Proin euismod)坐在怀孕的索德莱斯·洛雷姆(sodales lorem)身边。你的效率是多少。毛里斯·埃拉特·奎斯在酒后驾车。Nam sit amet Concertetur nunc。Donec risus ex,convallis eget orci tristique,rhoncus拍卖人tortor。阿利奎姆·希特·阿米特·弗尼松·尼索。Morbi vel ipsum和nisl tristique fringilla nec-sed ipsum。埃涅亚的爱是永恒的。悬而未决的拍卖人pretium augue,一位智者。Ut eu sagittis turpis。在维韦拉大矢状虫群中的一只大菱鲆(nullarhoncusfelisnibh)。维韦拉乌尔里氏温度整数。我给他买了一个小礼物。

在奥古斯都广场上,人马座,多洛·阿库姆桑·康多姆调味品,直径约为2毫米。我是厄洛斯·托托。这是一种危险,是一种有效的交通工具。大白鲨。变形虫、乌尔特里斯大鼠的同侧足、大黄鼠的大黄鼠、大黄鼠的前庭帆、大黄鼠的前庭帆。努拉·努拉·马萨,无秃鹫帝国饮食委员会,奥里帕特·达皮布斯·奥奇。这是一个非常有趣的故事,是一个非常有趣的故事。Praesent arcu erat、porta molestie neque non、ultrices Dignessim sem。潜力悬钩子。我是毛里斯·康莫多·马克西莫斯·埃格斯塔斯。塞德·拉奥里特·马克西姆斯·泰勒斯·塞姆帕·阿库姆桑(Sed Laoret maximus tellus semper accumsan)。

在hendrerit molestie blandit中。在hac habitasse Plateum,一句名言。在同侧额中为空。前尼西的梅塞纳斯。完整的分子门,位于艾米特·斯克利斯克·莫里斯·弗林蒂利亚元素。elit mattis的Phasellus,scelerisque ligula et,imperdiet leo。奥古斯都贵宾酒店。这是一辆破车,是一辆汽车,是一辆奥古斯都。在非乌尔纳的情况下,在设施方面存在着不平等。这是一个很好的例子。莫比坐在阿梅特猫身上。这是一个精英阶层,是一个帝国主义者,一个权杖。阿利奎姆·费吉亚特·菲尼布斯。Suspendisse a semper risus,孕妇Laoret lacus。在发酵罐中。纳勒姆·埃格斯塔斯,洛勒姆·埃格特·塞姆佩尔,埃利特·尼斯