Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

67 строки
1.0 KiB

  1. /**
  2. * Module dependencies.
  3. */
  4. var Tween = require('tween');
  5. var raf = require('raf');
  6. /**
  7. * Expose `scrollTo`.
  8. */
  9. module.exports = scrollTo;
  10. /**
  11. * Scroll to `(x, y)`.
  12. *
  13. * @param {Number} x
  14. * @param {Number} y
  15. * @api public
  16. */
  17. function scrollTo(x, y, options) {
  18. options = options || {};
  19. // start position
  20. var start = scroll();
  21. // setup tween
  22. var tween = Tween(start)
  23. .ease(options.ease || 'out-circ')
  24. .to({ top: y, left: x })
  25. .duration(options.duration || 1000);
  26. // scroll
  27. tween.update(function(o){
  28. window.scrollTo(o.left | 0, o.top | 0);
  29. });
  30. // handle end
  31. tween.on('end', function(){
  32. animate = function(){};
  33. });
  34. // animate
  35. function animate() {
  36. raf(animate);
  37. tween.update();
  38. }
  39. animate();
  40. return tween;
  41. }
  42. /**
  43. * Return scroll position.
  44. *
  45. * @return {Object}
  46. * @api private
  47. */
  48. function scroll() {
  49. var y = window.pageYOffset || document.documentElement.scrollTop;
  50. var x = window.pageXOffset || document.documentElement.scrollLeft;
  51. return { top: y, left: x };
  52. }