       hideTimer = setTimeout (=> @hide()), @hideDelay
 
   positionOverlay: ->
-    bounding = @parent.getBoundingClientRect()
-    @view.style.bottom   = document.documentElement.clientHeight - bounding.top + 'px'
-    switch @position
-      when 'left'
-        @view.style.left = bounding.left + 'px'
-      when 'right'
-        @view.style.left = bounding.left + bounding.width -  @view.offsetWidth + 'px'
+    p = @parent
+    pos = @position
+    v = @view
+    positioner = ->
+      bounding = p.getBoundingClientRect()
+      v.style.bottom   = document.documentElement.clientHeight - bounding.top + 'px'
+      switch pos
+        when 'left'
+          v.style.left = bounding.left + 'px'
+        when 'right'
+          v.style.left = bounding.left + bounding.width -  v.offsetWidth + 'px'
+      window.requestAnimationFrame positioner
+    window.requestAnimationFrame positioner

  show: ->
    @view.style.display = 'block'
    @emitter.emit 'didShow'
    setTimeout ( =>
      @positionOverlay()
      @view.classList.remove 'dontshow'), 20

  destroy: ->
    if document.body.contains @view

    @oldOnMouseOut = @parent.onmouseout

    @showOnHover()
    @positionOverlay()

    this

  onDidShow: (f) ->
