Guest User

Untitled

a guest
Mar 23rd, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. /**
  2. * Smooth scroll to ...
  3. *
  4. * @param {integer} offset Vertical scroll offset (px)
  5. * @param {integer} speed Animation speed (ms)
  6. */
  7. function smoothScrollTo(offset = 0, speed = 500) {
  8.  
  9. // Fallback for old browsers
  10. if (!performance || !performance.now || !requestAnimationFrame) {
  11. window.scrollTo(0, 0)
  12. return
  13. }
  14.  
  15. const cosParameter = window.scrollY / 2
  16. let scrollCount = 0
  17. let oldTimestamp = performance.now()
  18.  
  19. function step (newTimestamp) {
  20. scrollCount += Math.PI / (speed = 500 / (newTimestamp - oldTimestamp))
  21.  
  22. if (scrollCount >= Math.PI) {
  23. window.scrollTo(0, 0)
  24. }
  25.  
  26. if (window.scrollY <= offset) {
  27. return
  28. }
  29.  
  30. window.scrollTo(0, Math.round(cosParameter + cosParameter * Math.cos(scrollCount)))
  31. oldTimestamp = newTimestamp
  32. requestAnimationFrame(step)
  33. }
  34.  
  35. requestAnimationFrame(step)
  36. }
  37.  
  38. export {smoothScrollTo as default}
Add Comment
Please, Sign In to add comment