超实用的全新JavaScript事件Scrollend实例详解

 更新时间:2023年01月29日 14:49:54   作者:CUGGZ  
这篇文章主要为大家介绍了超实用的全新JavaScript事件Scrollend实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

概述

在开发中,可能会遇到当页面滚动停止之后执行某些操作的需求。在 scrollend 事件之前,并没有可靠的方法来检测页面滚动是否完成。这意味着事件会延迟触发,或者当用户的手指仍在屏幕上时触发。这种不可靠性导致了错误和用户体验不佳。

以前可能会使用定时器来检测滚动停止

document.onscroll = event => {
  clearTimeout(window.scrollEndTimer)
  window.scrollEndTimer = setTimeout(callback, 100)
}

这个 setTimeout() 可以知道滚动是否停止了 100 毫秒。这使它更像是滚动已暂停事件,而不是滚动已结束事件。

有了 scrollend 事件,浏览器就会帮我们完成滚动停止的监听:

document.onscrollend = event => {…}

可以在 Codepen 查看示例:codepen.io/web-dot-dev…,当滚动停止时会有提示。核心代码如下:

document.onscrollend = event => {
  Toast('scroll end')
}

使用

scrollend 事件会在以下情况被触发:

  • 用户的触摸已被释放;
  • 用户的指针已释放滚动条;
  • 用户的按键已被释放;
  • 滚动到片段已完成;
  • 滚动捕捉已完成;
  • scrollTo()已完成;
  • 用户已滚动视觉视口。

scrollend 事件在以下情况不会触发:

  • 用户的手势没有导致任何滚动位置变化;
  • scrollTo() 没有产生任何移动。

这个事件花了很长时间才出现在 Web 平台上的一个原因就是有许多小细节需要进行规范。最复杂的就是视觉视口与文档的滚动结束细节。对于放大的网页,在此缩放状态下,可以四处滚动,但不一定是在滚动文档。不过,即使是这个视觉视口用户驱动的滚动交互也会在完成后发出 scrollend 事件。

与其他滚动事件一样,可以通过多种方式注册侦 听 器:

addEventListener("scrollend", (event) => {
  // scroll ended
});
aScrollingElement.addEventListener("scrollend", (event) => {
  // scroll ended
});

也可以使用事件属性:

document.onscrollend = (event) => {
  // scroll ended
};
aScrollingElement.onscrollend = (event) => {
  // scroll ended
};

浏览器支持

目前仅 Firefox 109 版本支持 scrollend 事件。不久的将来,Chrome 111 版本也将支持该事件。

如果现在想要使用这个事件,可以在开始时检查支持情况,如果不支持该事件就继续使用当前的滚动结束策略(如果有的话):

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

这样就能在可用时渐进增强 scrollend 事件。当然也可以使用 polyfill:github.com/argyleink/s…

首先在终端中安装npm包:

npm i -D scrollyfills

然后在要的地方使用 scrollend 事件:

import {scrollend} from 'scrollyfills';
someElementThatScrolls.addEventListener('scrollend', event => {
  console.log('scroll has ended');
});

polyfill 将渐进增强以使用浏览器内置的 scrollend 事件(如果可用)。 如果它不可用,脚本会监视指针事件并滚动以对它可能结束的事件进行最佳评估。

参考:developer.chrome.com/blog/scroll…

以上就是超实用的全新JavaScript事件Scrollend实例详解的详细内容,更多关于JavaScript Scrollend事件的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript实现邮箱后缀提示功能的示例代码

    JavaScript实现邮箱后缀提示功能的示例代码

    这篇文章主要介绍了JavaScript实现邮箱后缀提示功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Input 特殊事件onpopertychange和oninput

    Input 特殊事件onpopertychange和oninput

    onpopertychange和oninput的区别。
    2009-06-06
  • JS定时器不可靠的原因及解决方案

    JS定时器不可靠的原因及解决方案

    JavaScript中所有的任务分为同步任务与异步任务,同步任务,顾名思义就是立即执行的任务,它一般是直接进入到主线程中执行,这篇文章主要介绍了JS定时器不可靠的原因及解决方案,需要的朋友可以参考下
    2022-01-01
  • 在js中做数字字符串补0(js补零)

    在js中做数字字符串补0(js补零)

    这篇文章主要介绍了在js中做数字字符串补0(js补零),需要的朋友可以参考下
    2017-03-03
  • JavaScript 预解析的4种实现方法解析

    JavaScript 预解析的4种实现方法解析

    这篇文章主要介绍了JavaScript 预解析的4种实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 微信小程序之购物车功能

    微信小程序之购物车功能

    这篇文章主要为大家详细介绍了微信小程序之购物车功能的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • js 字符串操作函数

    js 字符串操作函数

    js 字符串操作函数小结。
    2009-07-07
  • Bootstrap CSS布局之表格

    Bootstrap CSS布局之表格

    这篇文章主要为大家详细介绍了Bootstrap CSS布局之表格的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript实现生成动态表格和动态效果的方法详解

    JavaScript实现生成动态表格和动态效果的方法详解

    这篇文章主要介绍了如何通过JavaScript语言实现动图表格的生成以及动态效果的实现,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-02-02
  • 用js判断输入是否为中文的函数

    用js判断输入是否为中文的函数

    本篇文章主要是对js判断输入是否为中文的函数进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03

最新评论