原生JS基于window.scrollTo()封装垂直滚动动画工具函数

不言
Lepaskan: 2018-07-07 17:43:46
asal
4439 orang telah melayarinya

这篇文章主要介绍了关于原生JS基于window.scrollTo()封装垂直滚动动画工具函数 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

概要:

原生JS基于window.scrollTo()封装垂直滚动动画工具函数,可应用与锚点定位、回到顶部等操作。

封装原因:
在vue项目中,遇到需要实现垂直滚动效果的需求,初步想到的方法有两个:
1:使用window.scrollTo()方法,但是这个方法是没有动画效果的,需要手动封装一下。
2:使用JQuery的动画函数,缺点比较明显:需要引入JQuery。
显然,选择第一种好很多。

以下为封装window.scrollTo()的方法scroll(),文件名为scroll.js

// Created by xiaoqiang on 30/05/2018.
/**
 * @param {numeber} currentY 需要移动的dom当前位置离网页顶端的距离
 * @param {number} targetY 需要移动的dom当前位置离要移到的位置的距离
 */
function scroll (currentY, targetY) {
  // 计算需要移动的距离
  let needScrollTop = targetY - currentY
  let _currentY = currentY
  setTimeout(() => {
    // 一次调用滑动帧数,每次调用会不一样
    const dist = Math.ceil(needScrollTop / 10)
    _currentY += dist
    window.scrollTo(_currentY, currentY)
    // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
    if (needScrollTop > 10 || needScrollTop < -10) {
      scroll(_currentY, targetY)
    } else {
      window.scrollTo(_currentY, targetY)
    }
  }, 1)
}
// 暴露此方法
export default scroll
Salin selepas log masuk
使用方法

比如在vue中,可以这样用:
import scroll form '@/common/util/scroll.js'
随后在响应触发事件的函数中调用scroll(),需要传入两个参数,比如:

      methods: {
        test () {
          const scrollHeight = document.getElementsByClassName('scroll-element')[0].offsetTop
          const currentY = document.documentElement.scrollTop || document.body.scrollTop
          scroll(currentY, scrollHeight)
        }
      }
Salin selepas log masuk

有错误或不清晰或可以改进的地方欢迎指出,O(∩_∩)O~~

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

JS实现归并排序

vue 实现数字滚动增加效果

Jquery添加loading过渡遮罩

Atas ialah kandungan terperinci 原生JS基于window.scrollTo()封装垂直滚动动画工具函数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!