class ToTop # NOTE: I could have probably extract fixed positioning from # Tailing, but then I would need to parametrize positionElement # function to make it flexible to handle both cases. In that # situation I prefer a bit less DRY code over simplicity of # the calculations. constructor: (@window, @element_selector, @container_selector) -> @position = @window.scrollTop() @window.scroll( $.throttle( 200, @onScroll.bind(this) ) ) this element: -> $(@element_selector) container: -> $(@container_selector) onScroll: -> @positionElement() positionElement: -> element = @element() container = @container() return if element.length is 0 containerHeight = container.outerHeight() windowHeight = @window.height() offset = container.offset().top + containerHeight - (@window.scrollTop() + windowHeight) max = containerHeight - windowHeight offset = max if offset > max if offset > 0 element.css(bottom: offset + 4) else element.css(bottom: 2) Travis.ToTop = ToTop