实例讲解js如何实现dom元素横向及纵向滚动的动画

广告:宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取~~~

实例讲解js如何实现dom元素横向及纵向滚动的动画

本篇文章给大家介绍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}
登录后复制

相关推荐:【JavaScript视频教程】

以上就是实例讲解js如何实现dom元素横向及纵向滚动的动画的详细内容,更多请关注9543建站博客其它相关文章!

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:做网页需要什么软件?五个好用的网页编辑器软件推荐
下一篇:uniapp页面跳转出现白屏怎么办

发表评论

关闭广告
关闭广告