35 lines
1.1 KiB
CoffeeScript
35 lines
1.1 KiB
CoffeeScript
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( Ember.run.throttle(this, @onScroll, [], 200, false) )
|
|
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
|