123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /**
- * @desc scroll滚动方法
- |*| * scrollApi.getScrollTop()
- |*| * scrollApi.setScrollTop(h)
- |*| * scrollApi.scrollTo(to,duration)
- */
- var requestAnimationFrame = function () {
- return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) {
- window.setTimeout(callback, 1000 / 60);
- };
- }();
- var scrollApi = {
- getScrollTop: function getScrollTop() {
- return document.documentElement && document.documentElement.scrollTop || document.body.scrollTop;
- },
- setScrollTop: function setScrollTop(h) {
- h && window.scrollTo(0, h);
- },
- scrollTo: function scrollTo(to) {
- var _this = this;
- var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- var minDecelerate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 4;
- var diff = to - this.getScrollTop();
- if (diff === 0) return;
- if (duration <= 0) {
- this.setScrollTop(to);
- return;
- }
- var step = diff / duration * 10;
- requestAnimationFrame(function () {
- if (Math.abs(step) > Math.abs(diff)) {
- _this.setScrollTop(_this.getScrollTop() + diff);
- return;
- }
- _this.setScrollTop(_this.getScrollTop() + step);
- if (diff > 0 && _this.getScrollTop() >= to || diff < 0 && _this.getScrollTop() <= to) {
- return;
- }
- _this.scrollTo(to, duration - 16 / minDecelerate);
- });
- }
- };
- module.exports = scrollApi;
|