56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
| Math.easeInOutQuad = function(t, b, c, d) {
 | |
|   t /= d / 2
 | |
|   if (t < 1) {
 | |
|     return c / 2 * t * t + b
 | |
|   }
 | |
|   t--
 | |
|   return -c / 2 * (t * (t - 2) - 1) + b
 | |
| }
 | |
| 
 | |
| var requestAnimFrame = (function() {
 | |
|   return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
 | |
| })()
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  * @param {number} amount
 | |
|  */
 | |
| function move(amount) {
 | |
|   document.documentElement.scrollTop = amount
 | |
|   document.body.parentNode.scrollTop = amount
 | |
|   document.body.scrollTop = amount
 | |
| }
 | |
| 
 | |
| function position() {
 | |
|   return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * @param {number} to
 | |
|  * @param {number} duration
 | |
|  * @param {Function} callback
 | |
|  */
 | |
| export function scrollTo(to, duration, callback) {
 | |
|   const start = position()
 | |
|   const change = to - start
 | |
|   const increment = 20
 | |
|   let currentTime = 0
 | |
|   duration = (typeof (duration) === 'undefined') ? 500 : duration
 | |
|   var animateScroll = function() {
 | |
|     currentTime += increment
 | |
| 
 | |
|     var val = Math.easeInOutQuad(currentTime, start, change, duration)
 | |
| 
 | |
|     move(val)
 | |
| 
 | |
|     if (currentTime < duration) {
 | |
|       requestAnimFrame(animateScroll)
 | |
|     } else {
 | |
|       if (callback && typeof (callback) === 'function') {
 | |
|         callback()
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   animateScroll()
 | |
| }
 |