Skip to content

Instantly share code, notes, and snippets.

@isaacw
Created February 17, 2017 03:16
Show Gist options
  • Save isaacw/fdcd8cafebe94fb1d1d94fa919817cee to your computer and use it in GitHub Desktop.
Save isaacw/fdcd8cafebe94fb1d1d94fa919817cee to your computer and use it in GitHub Desktop.
Simple class for detecting when the user scrolls past a specific point
# ScrollPoint class
Events.PassedForward = "passed:forward"
Events.PassedBackward = "passed:backward"
class exports.ScrollPoint extends Framer.EventEmitter
constructor: (scroll, value, axis="y") ->
@value = value # Make available for checking
key = "scroll#{axis.toUpperCase()}" # scrollX/scrollY
# Handlers
forward = =>
if scroll[key] >= value
@emit Events.PassedForward
scroll.off "move", forward # remove handler
scroll.onMove backward # add other handler
backward = =>
if scroll[key] < value
@emit Events.PassedBackward
scroll.off "move", backward # remove handler
scroll.onMove forward # add other handler
# Determine which handler we should start with
scrollHandler = if scroll[key] < value then forward else backward
# Start listening
scroll.onMove scrollHandler
# Event convenience methods
onPassedForward: (handler) -> @.on Events.PassedForward, handler
oncePassedForward: (handler) -> @.once Events.PassedForward, handler
onPassedBackward: (handler) -> @.on Events.PassedBackward, handler
oncePassedBackward: (handler) -> @.once Events.PassedBackward, handler
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment