|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /**
- * Module dependencies.
- */
-
- var Tween = require('tween');
- var raf = require('raf');
-
- /**
- * Expose `scrollTo`.
- */
-
- module.exports = scrollTo;
-
- /**
- * Scroll to `(x, y)`.
- *
- * @param {Number} x
- * @param {Number} y
- * @api public
- */
-
- function scrollTo(x, y, options) {
- options = options || {};
-
- // start position
- var start = scroll();
-
- // setup tween
- var tween = Tween(start)
- .ease(options.ease || 'out-circ')
- .to({ top: y, left: x })
- .duration(options.duration || 1000);
-
- // scroll
- tween.update(function(o){
- window.scrollTo(o.left | 0, o.top | 0);
- });
-
- // handle end
- tween.on('end', function(){
- animate = function(){};
- });
-
- // animate
- function animate() {
- raf(animate);
- tween.update();
- }
-
- animate();
-
- return tween;
- }
-
- /**
- * Return scroll position.
- *
- * @return {Object}
- * @api private
- */
-
- function scroll() {
- var y = window.pageYOffset || document.documentElement.scrollTop;
- var x = window.pageXOffset || document.documentElement.scrollLeft;
- return { top: y, left: x };
- }
|