UNPKG

ng-devui

Version:

DevUI components based on Angular

42 lines 5.71 kB
export function scrollAnimate(target, currentTopValue, targetTopValue, timeGap = 40, scrollTime = 450, callback) { if (typeof document === 'undefined' || typeof window === 'undefined' || !target) { return; } const startTimeStamp = Date.now(); const drawAnimateFrame = () => { const currentTime = Date.now() - startTimeStamp; if (currentTime - timeGap > scrollTime) { target.scrollTop = targetTopValue; if (target === document.documentElement) { // 兼容写法,老浏览器/老API模式需要document.body滚动,新的需要documentElement滚动 document.body.scrollTop = targetTopValue; } if (callback) { callback(); } } else { const tempTopValue = easeInOutCubic(currentTime, currentTopValue, targetTopValue, scrollTime); target.scrollTop = tempTopValue; if (target === document.documentElement) { document.body.scrollTop = tempTopValue; } setTimeout(() => { requestAnimationFrame(drawAnimateFrame); }, timeGap); } }; requestAnimationFrame(drawAnimateFrame); } export function easeInOutCubic(t, b, c, d) { const cc = c - b; let tt = t / (d / 2); if (tt < 1) { return ((cc / 2) * tt * tt * tt + b); } else { // eslint-disable-next-line no-return-assign return ((cc / 2) * ((tt -= 2) * tt * tt + 2) + b); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsQW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2dWkvdXRpbHMvYW5pbWF0aW9ucy9zY3JvbGxBbmltYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLFVBQVUsR0FBRyxHQUFHLEVBQUUsUUFBUztJQUM5RyxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoRixPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsY0FBYyxDQUFDO1FBQ2hELElBQUksV0FBVyxHQUFHLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztZQUNsQyxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hDLDBEQUEwRDtnQkFDMUQsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1lBQzNDLENBQUM7WUFDRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFFBQVEsRUFBRSxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO1lBQ2hDLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO1lBQ3pDLENBQUM7WUFDRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDMUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUN2RSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO1NBQU0sQ0FBQztRQUNOLDRDQUE0QztRQUM1QyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbEFuaW1hdGUodGFyZ2V0LCBjdXJyZW50VG9wVmFsdWUsIHRhcmdldFRvcFZhbHVlLCB0aW1lR2FwID0gNDAsIHNjcm9sbFRpbWUgPSA0NTAsIGNhbGxiYWNrPykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhdGFyZ2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHN0YXJ0VGltZVN0YW1wID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZHJhd0FuaW1hdGVGcmFtZSA9ICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWVTdGFtcDtcbiAgICBpZiAoY3VycmVudFRpbWUgLSB0aW1lR2FwID4gc2Nyb2xsVGltZSkge1xuICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IHRhcmdldFRvcFZhbHVlO1xuICAgICAgaWYgKHRhcmdldCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIC8vIOWFvOWuueWGmeazle+8jOiAgea1j+iniOWZqC/ogIFBUEnmqKHlvI/pnIDopoFkb2N1bWVudC5ib2R55rua5Yqo77yM5paw55qE6ZyA6KaBZG9jdW1lbnRFbGVtZW505rua5YqoXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gdGFyZ2V0VG9wVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVtcFRvcFZhbHVlID0gZWFzZUluT3V0Q3ViaWMoY3VycmVudFRpbWUsIGN1cnJlbnRUb3BWYWx1ZSwgdGFyZ2V0VG9wVmFsdWUsIHNjcm9sbFRpbWUpO1xuICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IHRlbXBUb3BWYWx1ZTtcbiAgICAgIGlmICh0YXJnZXQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IHRlbXBUb3BWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZHJhd0FuaW1hdGVGcmFtZSk7XG4gICAgICB9LCB0aW1lR2FwKTtcbiAgICB9XG4gIH07XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZShkcmF3QW5pbWF0ZUZyYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dEN1YmljKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNjID0gYyAtIGI7XG4gIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xuICBpZiAodHQgPCAxKSB7XG4gICAgcmV0dXJuICgoY2MgLyAyKSAqIHR0ICogdHQgKiB0dCArIGIpO1xuICB9IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgcmV0dXJuICgoY2MgLyAyKSAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiKTtcbiAgfVxufVxuIl19