UNPKG

press-ui

Version:

简单、易用的跨端组件库,兼容 Vue2 和 Vue3,同时支持 uni-app和普通 Vue 项目

80 lines (77 loc) 2.13 kB
import { Friction } from './friction'; import { Spring } from './spring'; export function Scroll(extent, friction, spring) { this._extent = extent; this._friction = friction || new Friction(0.01); this._spring = spring || new Spring(1, 90, 20); this._startTime = 0; this._springing = false; this._springOffset = 0; } Scroll.prototype.snap = function (e, t) { this._springOffset = 0; this._springing = true; this._spring.snap(e); this._spring.setEnd(t); }; Scroll.prototype.set = function (e, t) { this._friction.set(e, t); if (e > 0 && t >= 0) { this._springOffset = 0; this._springing = true; this._spring.snap(e); this._spring.setEnd(0); } else { if (e < -this._extent && t <= 0) { this._springOffset = 0; this._springing = true; this._spring.snap(e); this._spring.setEnd(-this._extent); } else { this._springing = false; } } this._startTime = (new Date()).getTime(); }; Scroll.prototype.x = function (e) { if (!this._startTime) { return 0; } if (!e) { e = ((new Date()).getTime() - this._startTime) / 1e3; } if (this._springing) { return this._spring.x() + this._springOffset; } let t = this._friction.x(e); const n = this.dx(e); if ((t > 0 && n >= 0) || (t < -this._extent && n <= 0)) { this._springing = true; this._spring.setEnd(0, n); if (t < -this._extent) { this._springOffset = -this._extent; } else { this._springOffset = 0; } t = this._spring.x() + this._springOffset; } return t; }; Scroll.prototype.dx = function (e) { let t = 0; t = this._lastTime === e ? this._lastDx : this._springing ? this._spring.dx(e) : this._friction.dx(e); this._lastTime = e; this._lastDx = t; return t; }; Scroll.prototype.done = function () { return this._springing ? this._spring.done() : this._friction.done(); }; Scroll.prototype.setVelocityByEnd = function (e) { this._friction.setVelocityByEnd(e); }; Scroll.prototype.configuration = function () { const e = this._friction.configuration(); e.push.apply(e, this._spring.configuration()); return e; };