Advertisement
Guest User

Untitled

a guest
Aug 28th, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. class Parallax
  2.  
  3. constructor: ($element, opts = {}) ->
  4. @translate = opts.translate
  5. @disabled = no
  6. @position = 0
  7. @ly = 0
  8. @y = 0
  9. @nodes = {
  10. window: $(window)
  11. wrapper: $element.parent()
  12. element: $element
  13. }
  14.  
  15. @nodes.window.scroll (e) ->
  16. EventObserver.notify "parallax:scroll", e, log: no
  17.  
  18. #
  19. # Enable parallax animation
  20. #
  21. # @return {Void}
  22. #
  23. enable: () ->
  24. @disabled = no
  25.  
  26. EventObserver.subscribe "parallax:scroll", (e) =>
  27. return if @disabled or @._elementIsOutsideViewport()
  28.  
  29. @._update()
  30.  
  31. @._update()
  32.  
  33. #
  34. # Disable parallax animation
  35. #
  36. # @return {Void}
  37. #
  38. disable: () ->
  39. @disabled = yes
  40.  
  41. # private
  42.  
  43. #
  44. # Update parallax transform based on current scroll position
  45. #
  46. # @return {Void}
  47. #
  48. _update: () ->
  49. @y = @nodes.window.scrollTop()
  50. @position += (@y - @ly) * @translate
  51. @ly = @y
  52.  
  53. @nodes.element.css @._prefix {
  54. "transform": "translate3d(0, #{~~@position}px, 0)"
  55. }
  56.  
  57. #
  58. # Return whether or not the element is inside of the viewport
  59. #
  60. # @return {Bool}
  61. #
  62. _elementIsOutsideViewport: () ->
  63. rect = @nodes.element[0].getBoundingClientRect()
  64. rect.bottom < 0 or rect.right < 0 or rect.left > @nodes.window.innerWidth or rect.top > @nodes.window.innerHeight
  65.  
  66. #
  67. # Vendor prefix CSS prop->value obj
  68. #
  69. # @param {Obj} properties
  70. #
  71. # @return {Obj}
  72. #
  73. _prefix: (properties) ->
  74. styles = {}
  75.  
  76. for prop, val of properties
  77. styles[prop] = styles["-moz-#{prop}"] = styles["-webkit-#{prop}"] = val
  78.  
  79. styles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement