“回到顶部”代码简单封装

原文链接:完美实现一个“回到顶部”

简单封装

/**
* 缓冲函数
* @param {Number} position 当前滚动位置
* @param {Number} destination 目标位置
* @param {Number} rate 缓动率
* @param {Function} callback 缓动结束回调函数 两个参数分别是当前位置和是否结束
*/
var easeout = function (position, destination, rate, callback) {
  if (position === destination || typeof destination !== 'number') {
    return false;
  }
  destination = destination || 0;
  rate = rate || 2;

  // 不存在原生`requestAnimationFrame`,用`setTimeout`模拟替代
  if (!window.requestAnimationFrame) {
    window.requestAnimationFrame = function (fn) {
      return setTimeout(fn, 17);
    }
  }

  var step = function () {
    position = position + (destination - position) / rate;
    if (Math.abs(destination - position) < 1) {
      callback(destination, true);
      return;
    }
    callback(position, false);
    requestAnimationFrame(step);
  };
  step();
}

调用

var scrollTopSmooth = function (position) {
  // 当前滚动高度
  var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  easeout(scrollTop, position, 5, function (val) {
    window.scrollTo(0, val);
  });
}

$backToTop = document.querySelector('.back-to-top')
$backToTop.addEventListener('click', function () {
  scrollTopSmooth(200);
}, false);

效果查看戳scrollIntoView.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,250评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,573评论 2 59
  • 从梦中惊醒,天还没亮,醒来,看了看周围,没有一人。回想昨晚,貌似,我说我困了,就先睡了,当时儿子说他还不想睡,于是...
    想想妈叙生活阅读 3,073评论 1 5
  • 第十二章 你送我的第一份礼物 张影见许清一直盯着顾晨,就把手往许清眼前晃了晃,有点难过的说:“姐,你也看我一眼...
    朱朱家的猪阅读 3,012评论 0 0
  • 努力不应该是人生的标签 它应是融入血液的一种常态化特质 像呼吸一样自然 像空气一样重要 没有哪个人能通过5天8个小...
    苏米勒阅读 3,003评论 0 0

友情链接更多精彩内容