Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Parallax
- constructor: ($element, opts = {}) ->
- @translate = opts.translate
- @disabled = no
- @position = 0
- @ly = 0
- @y = 0
- @nodes = {
- window: $(window)
- wrapper: $element.parent()
- element: $element
- }
- @nodes.window.scroll (e) ->
- EventObserver.notify "parallax:scroll", e, log: no
- #
- # Enable parallax animation
- #
- # @return {Void}
- #
- enable: () ->
- @disabled = no
- EventObserver.subscribe "parallax:scroll", (e) =>
- return if @disabled or @._elementIsOutsideViewport()
- @._update()
- @._update()
- #
- # Disable parallax animation
- #
- # @return {Void}
- #
- disable: () ->
- @disabled = yes
- # private
- #
- # Update parallax transform based on current scroll position
- #
- # @return {Void}
- #
- _update: () ->
- @y = @nodes.window.scrollTop()
- @position += (@y - @ly) * @translate
- @ly = @y
- @nodes.element.css @._prefix {
- "transform": "translate3d(0, #{~~@position}px, 0)"
- }
- #
- # Return whether or not the element is inside of the viewport
- #
- # @return {Bool}
- #
- _elementIsOutsideViewport: () ->
- rect = @nodes.element[0].getBoundingClientRect()
- rect.bottom < 0 or rect.right < 0 or rect.left > @nodes.window.innerWidth or rect.top > @nodes.window.innerHeight
- #
- # Vendor prefix CSS prop->value obj
- #
- # @param {Obj} properties
- #
- # @return {Obj}
- #
- _prefix: (properties) ->
- styles = {}
- for prop, val of properties
- styles[prop] = styles["-moz-#{prop}"] = styles["-webkit-#{prop}"] = val
- styles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement