站長資訊網
最全最豐富的資訊網站

總結分享幾個借助 CSS 來更好的控制定時器的方法

總結分享幾個借助 CSS 來更好的控制定時器的方法

前端(vue)入門到精通課程:進入學習

平時工作中很多場合都要用到定時器,比如延遲加載、定時查詢等等,但定時器的控制有時候會有些許麻煩,比如鼠標移入停止、移出再重新開始。這次介紹幾個借助 CSS 來更好的控制定時器的方法,一起了解一下吧,相信可以帶來不一樣的體驗。【推薦學習:css視頻教程】

一、hover 延時觸發

有這樣一個場景,在鼠標停留在一個元素上1s后才觸發事件,不滿1s就不會觸發,這樣的好處是,可以避免鼠標在快速劃過時,頻繁的觸發事件。如果是用js來實現,可能會這樣

var timer = null el.addEventListener('mouseover', () => {   timer && clearTimeout(timer)   timer = setTimeout(() => {     // 具體邏輯   }, 1000) })

是不是這樣?等等,這樣還沒完,這樣只做到了延時,鼠標離開以后還是會觸發,還需要在鼠標離開時取消定時器

el.addEventListener('mouseout', () => {   timer && clearTimeout(timer) })

另外,在使用mouseout時還需要考慮 dom 嵌套結構,因為這些事件在父級 -> 子級的過程中仍然會觸發,總之,細節會非常多,很容易誤觸發。

現在轉折來了,如果借用 CSS 就可以有效地避免上述問題,如下,先給需要觸發的元素加一個有延時的transition

button:hover{   opacity: 0.999; /*無關緊要的樣式*/   transition: 0s 1s opacity; /*延時 1s */ }

這里只需一個無關緊要的樣式就行,如果opacity已經使用過了,可以使用其他的,比如transform:translateZ(.1px),也是可行的。然后添加監聽transitionend方法

GlobalEventHandlers.ontransitionend – Web API 接口參考 | MDN (mozilla.org)

el.addEventListener('transitionend', () => {   // 具體邏輯 })

這就結束了。無需定時器,也無需取消,更無需考慮 dom 結構,完美實現。

下面是一個小實例,在hover一段時間后觸發alert

總結分享幾個借助 CSS 來更好的控制定時器的方法

原理和上面一致,完整代碼可以查看線上demo:hover_alert (codepen.io)或者hover_alert(runjs.work)

?以后再碰到這樣的需要可以停下來思考一番,很多和mouseover有關的交互都可以用這種方式來實現

二、長按觸發事件

長按也是一個比較常見的需求,它可以很好的和點擊事件區分開來,從而賦予

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
精品久久久久久久| 老湿机一区午夜精品免费福利| 3d精品重口littleballerina| 99热婷婷国产精品综合| 亚洲一区二区三区国产精品| 亚洲第一页日韩专区| 老牛精品亚洲成av人片| 无码人妻精品一区二区蜜桃| 国产精品色拉拉免费看| 亚洲国产精品成人综合久久久| 日产精品久久久一区二区| 久久久精品免费国产四虎| 日韩精品无码免费专区网站| 久久精品国产第一区二区| 精品国产91久久久久久久a | 国产高清在线精品免费软件| 亚洲国产成人综合精品| 午夜精品久久久久| 孩交videos精品乱子豆奶视频 | 国产亚洲精品美女久久久久久下载 | 久久久久青草大香线综合精品| 国产精品女同久久久久电影院| 国产一区二区精品| 国产麻豆精品久久一二三| 国产啪精品视频网站免费尤物| 91麻豆精品国产自产在线观看一区| 久久久精品国产亚洲成人满18免费网站| 精品久久久久久99人妻| 国产精品综合久久第一页| 国产精品视频九九九| 精品久久久久久国产牛牛app| 久久精品三级视频| 国内精品久久久久久不卡影院| 97久久精品国产精品青草| 国精品午夜福利视频不卡 | 正在播放国产精品| 国产午夜亚洲精品国产| 亚洲Av永久无码精品一区二区| 性感美女视频在线观看免费精品| 成人国内精品视频在线观看| 日韩精品人妻系列无码av东京|