成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scrollend:超實用的全新JavaScript事件

開發(fā) 前端
polyfill 將漸進增強以使用瀏覽器內(nèi)置的 scrollend 事件(如果可用)。如果它不可用,腳本會監(jiān)視指針事件并滾動以對它可能結(jié)束的事件進行最佳評估。

大家好,我是 CUGGZ。

在開發(fā)中,可能會遇到當(dāng)頁面滾動停止之后執(zhí)行某些操作的需求。在 scrollend? 事件之前,并沒有可靠的方法來檢測頁面滾動是否完成。這意味著事件會延遲觸發(fā),或者當(dāng)用戶的手指仍在屏幕上時觸發(fā)。這種不可靠性導(dǎo)致了錯誤和用戶體驗不佳。下面就來看看全新的 scrollend 事件是如何使用的!

概述

以前可能會使用定時器來檢測滾動停止:

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

這個 setTimeout() 可以知道滾動是否停止了 100 毫秒。這使它更像是滾動已暫停事件,而不是滾動已結(jié)束事件。

有了 scrollend 事件,瀏覽器就會幫我們完成滾動停止的監(jiān)聽:

document.onscrollend = event {}

可以在 Codepen 查看示例:https://codepen.io/web-dot-dev/pen/rNrJRKg,當(dāng)滾動停止時會有提示。核心代碼如下:

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

圖片

使用

scrollend 事件會在以下情況被觸發(fā):

  • 用戶的觸摸已被釋放;
  • 用戶的指針已釋放滾動條;
  • 用戶的按鍵已被釋放;
  • 滾動到片段已完成;
  • 滾動捕捉已完成;
  • scrollTo()已完成;
  • 用戶已滾動視覺視口。

scrollend 事件在以下情況不會觸發(fā):

  • 用戶的手勢沒有導(dǎo)致任何滾動位置變化;
  • scrollTo() 沒有產(chǎn)生任何移動。

這個事件花了很長時間才出現(xiàn)在 Web 平臺上的一個原因就是有許多小細(xì)節(jié)需要進行規(guī)范。最復(fù)雜的就是視覺視口與文檔的滾動結(jié)束細(xì)節(jié)。對于放大的網(wǎng)頁,在此縮放狀態(tài)下,可以四處滾動,但不一定是在滾動文檔。不過,即使是這個視覺視口用戶驅(qū)動的滾動交互也會在完成后發(fā)出 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 版本也將支持該事件。

圖片

如果現(xiàn)在想要使用這個事件,可以在開始時檢查支持情況,如果不支持該事件就繼續(xù)使用當(dāng)前的滾動結(jié)束策略(如果有的話):

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

這樣就能在可用時漸進增強 scrollend 事件。當(dāng)然也可以使用 polyfill:https://github.com/argyleink/scrollyfills

首先需要在終端中安裝 npm 包:

npm i -D scrollyfills

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

import {scrollend} from 'scrollyfills';

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

polyfill 將漸進增強以使用瀏覽器內(nèi)置的 scrollend 事件(如果可用)。如果它不可用,腳本會監(jiān)視指針事件并滾動以對它可能結(jié)束的事件進行最佳評估。

參考:https://developer.chrome.com/blog/scrollend-a-new-javascript-event/

責(zé)任編輯:武曉燕 來源: 前端充電寶
相關(guān)推薦

2021-03-04 22:15:36

JavaScript編程開發(fā)

2019-07-02 10:36:30

JavaScript硬件開發(fā)

2022-07-29 09:01:20

Chrome試源代碼調(diào)試技巧

2022-01-17 10:50:15

Python代碼內(nèi)存

2018-09-07 23:38:45

小程序開發(fā)框架

2020-08-27 13:45:24

Linux監(jiān)控工具命令

2019-08-16 09:22:38

技術(shù)調(diào)試互聯(lián)網(wǎng)

2019-05-21 15:28:00

Tomcat腳本權(quán)限

2020-09-28 12:39:44

代碼規(guī)范管理

2009-10-30 09:59:09

Hyper-V應(yīng)用技巧

2023-08-11 17:39:43

JavaScriptWeb 應(yīng)用程序

2024-08-21 14:55:02

2023-11-26 17:54:07

JavaScript開發(fā)

2020-08-31 08:25:06

Python時間模塊開發(fā)

2011-01-21 07:22:48

jQuerywebJavaScript

2018-07-12 10:08:31

圖像超分辨率重建技術(shù)原理

2022-05-30 07:58:52

瀏覽器插件

2022-08-07 10:44:00

JSONPython對象

2021-03-12 10:01:33

Sudo命令Linux

2015-05-25 11:04:25

超實用開發(fā)框架
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产剧情一区 | 在线欧美a | 69电影网 | 国产精品性做久久久久久 | 色香蕉在线| 午夜二区| 亚洲精品在线视频 | 国产成人精品福利 | 亚洲一区二区网站 | 美女视频一区 | 久久久久久国产精品免费免费 | 精品二 | 亚洲一区二区三区在线视频 | 91亚洲精品久久久电影 | 久久久tv | 狠狠撸在线视频 | 97色在线视频| 亚洲欧洲视频 | 成人午夜精品一区二区三区 | 精品久久久久久久久久久久久 | 毛片免费在线 | 午夜免费福利电影 | 欧美视频一区 | 福利社午夜影院 | 97国产精品| 羞羞色影院 | 国产www成人 | 亚洲九九 | 免费在线观看一区二区三区 | www.久久国产精品 | 久久精品欧美一区二区三区不卡 | 久久久久亚洲精品国产 | 一呦二呦三呦国产精品 | 狠狠做深爱婷婷综合一区 | 欧美一区永久视频免费观看 | 欧美日韩国产传媒 | 久久久久久国产精品三区 | 亚洲a视频 | 国产小视频在线 | 奇米av | 国产精品视频导航 |