跟随Element学习Vue小技巧(55)——Backtop

571 阅读3分钟

不要说不可能

没有什么不可能

前言

升上去没?
如果没有,试试Backtop
你也可以一飞冲天!

1 Backtop

动画 rAF

代码片段

const rAF = window.requestAnimationFrame 
    || (func => setTimeout(func, 16));

技巧解析

何为动画?
在一段时间里连续运动,也就是每一秒都动那么一下下
所以,setInterval不正好合适吗
话虽如此,可浏览器并不会以固定的秒数更新页面,所以会导致失帧
那么,能不能在浏览器每次刷新的时候才动那么一下呢?
requestAnimationFrame就是为此而生的
很不是很鸡冻啊,O(∩_∩)O哈哈~

前端requestAnimationFrame概述

小工具

scrollToTop

代码片段

/*
* @ {desc} 滚动到顶部
* @ {params} el-需要滚动容器,默认document.documentElement
* @ {example}
*/
scrollToTop() {
  const cubic = value => Math.pow(value, 3);
  const easeInOutCubic = value => value < 0.5
    ? cubic(value * 2) / 2
    : 1 - cubic((1 - value) * 2) / 2;
  const el = this.el;
  const beginTime = Date.now();
  const beginValue = el.scrollTop;
  const rAF = window.requestAnimationFrame || (func => setTimeout(func, 16));
  const frameFunc = () => {
    const progress = (Date.now() - beginTime) / 500;
    if (progress < 1) {
      el.scrollTop = beginValue * (1 - easeInOutCubic(progress));
      rAF(frameFunc);
    } else {
      el.scrollTop = 0;
    }
  };
  rAF(frameFunc);
}



我甚至连Ta的一张照片都没有 Ta却藏在我的记忆最深处

参考链接

往期回顾