diff --git a/lib/timeline/Timeline.js b/lib/timeline/Timeline.js index 375a6248..3484b22a 100644 --- a/lib/timeline/Timeline.js +++ b/lib/timeline/Timeline.js @@ -428,32 +428,38 @@ Timeline.prototype.focus = function(id, options) { } }; - // Perform one last check at the end to make sure the final vertical - // position is correct - var finalVerticalCallback = function() { + // Enforces the final vertical scroll position + var setFinalVerticalPosition = function() { var finalVerticalScroll = getItemVerticalScroll(me, item); - if(finalVerticalScroll.shouldScroll && finalVerticalScroll.itemTop != initialVerticalScroll.itemTop) { + if (finalVerticalScroll.shouldScroll && finalVerticalScroll.itemTop != initialVerticalScroll.itemTop) { me._setScrollTop(-finalVerticalScroll.scrollOffset); - me._redraw(); + me._redraw(); } }; + // Perform one last check at the end to make sure the final vertical + // position is correct + var finalVerticalCallback = function() { + // Double check we ended at the proper scroll position + setFinalVerticalPosition(); + + // Let the redraw settle and finalize the position. + setTimeout(setFinalVerticalPosition, 100); + }; + // calculate the new middle and interval for the window var middle = (start + end) / 2; - var interval = Math.max((this.range.end - this.range.start), (end - start) * 1.1); + var interval = Math.max(this.range.end - this.range.start, (end - start) * 1.1); - var animation = (options && options.animation !== undefined) ? options.animation : true; + var animation = options && options.animation !== undefined ? options.animation : true; - if(!animation) { + if (!animation) { // We aren't animating so set a default so that the final callback forces the vertical location - initialVerticalScroll = {shouldScroll: false, scrollOffset: -1, itemTop: -1}; + initialVerticalScroll = { shouldScroll: false, scrollOffset: -1, itemTop: -1 }; } - this.range.setRange(middle - interval / 2, middle + interval / 2, { animation: animation }, finalVerticalCallback, verticalAnimationFrame); - - // Let the redraw settle and finalize the position - setTimeout(finalVerticalCallback, 100); + this.range.setRange(middle - interval / 2, middle + interval / 2, { animation: animation }, finalVerticalCallback, verticalAnimationFrame); } };