diff --git a/web/text_layer_builder.js b/web/text_layer_builder.js index e9029f692..441d91f23 100644 --- a/web/text_layer_builder.js +++ b/web/text_layer_builder.js @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +/* globals CustomStyle, PDFFindController, scrollIntoView */ 'use strict'; -/* globals CustomStyle, PDFFindController, scrollIntoView */ +var FIND_SCROLL_OFFSET_TOP = -50; +var FIND_SCROLL_OFFSET_LEFT = -400; /** * TextLayerBuilder provides text-selection @@ -310,7 +312,8 @@ var TextLayerBuilder = function textLayerBuilder(options) { var isSelected = isSelectedPage && i === selectedMatchIdx; var highlightSuffix = (isSelected ? ' selected' : ''); if (isSelected && !this.isViewerInPresentationMode) { - scrollIntoView(textDivs[begin.divIdx], { top: -50 }); + scrollIntoView(textDivs[begin.divIdx], { top: FIND_SCROLL_OFFSET_TOP, + left: FIND_SCROLL_OFFSET_LEFT }); } // Match inside new div. diff --git a/web/ui_utils.js b/web/ui_utils.js index 2684dc675..c832dc7ad 100644 --- a/web/ui_utils.js +++ b/web/ui_utils.js @@ -100,7 +100,8 @@ function getOutputScale(ctx) { /** * Scrolls specified element into view of its parent. * element {Object} The element to be visible. - * spot {Object} The object with the top property -- offset from the top edge. + * spot {Object} An object with optional top and left properties, + * specifying the offset from the top left edge. */ function scrollIntoView(element, spot) { // Assuming offsetParent is available (it's not available when viewer is in @@ -108,21 +109,32 @@ function scrollIntoView(element, spot) { // producing the error. See also animationStartedClosure. var parent = element.offsetParent; var offsetY = element.offsetTop + element.clientTop; + var offsetX = element.offsetLeft + element.clientLeft; if (!parent) { console.error('offsetParent is not set -- cannot scroll'); return; } - while (parent.clientHeight == parent.scrollHeight) { + while (parent.clientHeight === parent.scrollHeight) { if (parent.dataset._scaleY) { offsetY /= parent.dataset._scaleY; + offsetX /= parent.dataset._scaleX; } offsetY += parent.offsetTop; + offsetX += parent.offsetLeft; parent = parent.offsetParent; - if (!parent) + if (!parent) { return; // no need to scroll + } + } + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + if (spot.left !== undefined) { + offsetX += spot.left; + parent.scrollLeft = offsetX; + } } - if (spot) - offsetY += spot.top; parent.scrollTop = offsetY; }