来了来了,scrollend滚动停止事件也支持了

这篇文章发布于 2024年09月11日,星期三,23:18,归类于 JS API。 阅读 2076 次, 今日 3 次 4 条评论

 

scrollend封面图

一、这个特性期待已久了

之前处理滚动行为的时候,由于滚动事件的触发太频繁,所有,都会用setTimeout优化处理。

现在,浏览器支持了scrollend事件,就不需要那么麻烦了。

目前Firefox和Chrome浏览器已经原生支持,Safari的话还是需要老代码polyfill下(本文后面会有展示)。

scrollend事件的兼容性

效果体验

只要你不是Safari浏览器(手机不是iPhone),均可以滚动下面这个iframe内嵌容器,体验scrollend效果。

如果仅触摸,但是未发生滚动,scrollend事件是不会发生的。

二、使用方法和兼容

使用方法和scroll事件一致,可以在普通DOM元素上,也可以设置在全局的window的窗体对象上。

例如:

window.addEventListener("scrollend", (event) => {
  // 滚动结束
});

element.addEventListener("scrollend", (event) => {
  // 滚动结束
});

Polyfill 和渐进式增强

目前Safari浏览器还未支持,因此,生成环境还需要额外一段代码兼容下,这是简易实现:

if ('onscrollend' in window) {
  document.onscrollend = callback
} else {
  document.onscroll = event => {
    clearTimeout(window.scrollEndTimer)
    window.scrollEndTimer = setTimeout(callback, 100)
  }
}

更推荐使用已有的polyfill项目,参见:https://github.com/argyleink/scrollyfills

使用示意:

npm i -D scrollyfills
import { scrollend } from 'scrollyfills';

// 按照正常的事件方法使用
element.addEventListener('scrollend', event => {
  console.log('scroll has ended');
});

三、案例和结束

案例

例如,滚动导航高亮,滚动加载等,具体略……

OK,本文就结束了,确实就这点东西。

本周碎碎念

这周工作只有一半时间在开发,还有一半时间在整培训整PPT,一个是双周分享,还有一个是公司级课程修改,时间被切得比较碎,得想想细末的时间该如何利用起来,看老板们的周报?逛社区?可以尝试尝试。

小朋友开学一周了,那个字写的哟,那火气啊,蹭蹭蹭就往上走,以前花那么多时间练习和讲解,全都白费了,反复讲,反复记不住,唉……

文章正常更新1篇,技术视频3个,上周抖音涨粉不错(账号:张鑫旭本人),上周还发布一篇关于书籍出版的文章,以为会有不少讨论,结果反应平淡,果然还是小众了,这周在几个技术社区再同步下。

周末去采了葡萄(见图1),还别说,现摘的葡萄就是好吃,各种种类都有,价格也不贵,10元~30元每斤不等。

周末两场钓鱼,钓的不太顺,周六的是鲤鱼口乱(渔获见图2),周日的鲫鱼是没口,只糗了10条鲫鱼,好在价格都不贵,只要100元。

碎碎念配图

以上,感谢阅读!

❤️🧡💛💚💙

(本篇完)

分享到:


发表评论(目前4 条评论)

  1. Adel说道:

    React 合成事件不支持怎么办?

  2. Si_hen说道:

    我在测试中发现,似乎当滚轮持续滚动时,即使页面已经到底,scrollend事件也不会触发;而普通的scroll事件在页面触底后将不再触发。不知道这是不是期望的行为……

  3. 鳄鱼说道:

    学到了

  4. 哔哔哔说道:

    学习还得靠自我驱动,强行灌输效果差劲