本篇文章給大家介紹js如何實現dom元素橫向、縱向捲動的動畫,希望對需要的朋友有所幫助!
通過settimeout實現的捲動動畫,支援反覆點選變快
支援水平捲動和豎直捲動,快速點選會將上次未捲動完的距離疊加,捲動的時間不變,捲動的速度會變快
使用方式
1、複製下方程式碼;
2、匯出對應的方法 movingColumn
- 豎直捲動 moving
--水平捲動
3、函數接收3個引數 dom: 要滑動的元素 space: 點選一次要捲動的距離 istop/isLeft
是否向上/左捲動
功能修改
const hz = 60
在規定時間分幾次捲動到目標位置 60是人肉眼可識別的重新整理率
每次捲動的時間為 settime
裡的1ms * hz = 60ms
let timer:any = null // 定時器 let TargetLocation = -1 // 上一次點選應該捲動到的目標位置 let toltalSpace = 0 // 本次要捲動的距離 /** * @info 豎直捲動 * @info 捲動動畫 hz 重新整理率 可以修改捲動的速度 * @params dom:要捲動的元素; space 要捲動的距離; istop 捲動的方向; */ const movingColumn = (dom:HTMLDivElement, space: number, istop:boolean) => { // 使用者快速點選 則把上次未捲動的距離與本次捲動結合再一起 if (timer && TargetLocation !== -1) { toltalSpace += TargetLocation - dom.scrollTop // 計算本次的目標距離 if(istop) { TargetLocation = dom.scrollTop + toltalSpace + space } else { TargetLocation = dom.scrollTop + toltalSpace - space } } else if (!timer) { toltalSpace = 0 TargetLocation = -1 } if (istop) { toltalSpace -= space } else { toltalSpace += space } // 獲取本次的目標位置 const position = dom.scrollTop TargetLocation = position + toltalSpace clearInterval(timer) timer = null const hz = 60 let i = 1 timer = setInterval(() => { dom.scrollTop = position + i * toltalSpace / hz ++i if (i >= hz) { clearInterval(timer) timer = null dom.scrollTop = TargetLocation // 位置修正 toltalSpace = 0 TargetLocation = -1 } }, 1) } /** * @info 水平捲動 * @info 捲動動畫 hz 重新整理率 可以修改捲動的速度 * @params dom:要捲動的元素; space 要捲動的距離; isLeft 捲動的方向; */ const moving = (dom:HTMLDivElement, space: number, isLeft:boolean) => { // 使用者快速點選 則把上次未捲動的距離與本次捲動結合再一起 if (timer && TargetLocation !== -1) { toltalSpace += TargetLocation - dom.scrollLeft // 計算本次的目標距離 if(isLeft) { TargetLocation = dom.scrollLeft + toltalSpace + space } else { TargetLocation = dom.scrollLeft + toltalSpace - space } } else if (!timer) { toltalSpace = 0 TargetLocation = -1 } if (isLeft) { toltalSpace -= space } else { toltalSpace += space } // 獲取本次的目標位置 const position = dom.scrollLeft TargetLocation = position + toltalSpace clearInterval(timer) timer = null const hz = 60 let i = 1 timer = setInterval(() => { dom.scrollLeft = position + i * toltalSpace / hz ++i if (i >= hz) { clearInterval(timer) timer = null dom.scrollLeft = TargetLocation // 位置修正 toltalSpace = 0 TargetLocation = -1 } }, 1) } export { moving, movingColumn }
相關推薦:【】
以上就是範例講解js如何實現dom元素橫向及縱向捲動的動畫的詳細內容,更多請關注TW511.COM其它相關文章!