From 5b7be6be052452b99abf9918f6d908e0c30b1c91 Mon Sep 17 00:00:00 2001 From: Joe DF <3848219+joedf@users.noreply.github.com> Date: Thu, 19 May 2022 16:52:56 -0400 Subject: [PATCH] implement fixes from iangilman --- src/viewport.js | 62 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/src/viewport.js b/src/viewport.js index 451b602c..5a6f5bd5 100644 --- a/src/viewport.js +++ b/src/viewport.js @@ -500,36 +500,62 @@ $.Viewport.prototype = { if (this.wrapHorizontal) { //do nothing } else { - var horizontalThreshold = this.visibilityRatio * newBounds.width; var boundsRight = newBounds.x + newBounds.width; var contentRight = this._contentBoundsNoRotate.x + this._contentBoundsNoRotate.width; - var leftDx = this._contentBoundsNoRotate.x - boundsRight + horizontalThreshold; - var rightDx = contentRight - newBounds.x - horizontalThreshold; - if (horizontalThreshold > this._contentBoundsNoRotate.width && horizontalThreshold <= 1) { - newBounds.x += (leftDx + rightDx) / 2; - } else if (rightDx < 0) { - newBounds.x += rightDx; - } else if (leftDx > 0) { - newBounds.x += leftDx; + var horizontalThreshold, leftDx, rightDx; + if (newBounds.width > this._contentBoundsNoRotate.width) { + horizontalThreshold = this.visibilityRatio * this._contentBoundsNoRotate.width; + leftDx = this._contentBoundsNoRotate.x - newBounds.x + horizontalThreshold; + rightDx = contentRight - boundsRight - horizontalThreshold; + + if (rightDx > 0) { + newBounds.x += rightDx; + } else if (leftDx < 0) { + newBounds.x += leftDx; + } + } else { + horizontalThreshold = this.visibilityRatio * newBounds.width; + leftDx = this._contentBoundsNoRotate.x - boundsRight + horizontalThreshold; + rightDx = contentRight - newBounds.x - horizontalThreshold; + if (horizontalThreshold > this._contentBoundsNoRotate.width) { + newBounds.x += (leftDx + rightDx) / 2; + } else if (rightDx < 0) { + newBounds.x += rightDx; + } else if (leftDx > 0) { + newBounds.x += leftDx; + } } } if (this.wrapVertical) { //do nothing } else { - var verticalThreshold = this.visibilityRatio * newBounds.height; var boundsBottom = newBounds.y + newBounds.height; var contentBottom = this._contentBoundsNoRotate.y + this._contentBoundsNoRotate.height; - var topDy = this._contentBoundsNoRotate.y - boundsBottom + verticalThreshold; - var bottomDy = contentBottom - newBounds.y - verticalThreshold; - if (verticalThreshold > this._contentBoundsNoRotate.height && verticalThreshold <= 1) { - newBounds.y += (topDy + bottomDy) / 2; - } else if (bottomDy < 0) { - newBounds.y += bottomDy; - } else if (topDy > 0) { - newBounds.y += topDy; + var verticalThreshold, topDy, bottomDy; + if (newBounds.height > this._contentBoundsNoRotate.height) { + verticalThreshold = this.visibilityRatio * this._contentBoundsNoRotate.height; + topDy = this._contentBoundsNoRotate.y - newBounds.y + verticalThreshold; + bottomDy = contentBottom - boundsBottom - verticalThreshold; + + if (bottomDy > 0) { + newBounds.y += bottomDy; + } else if (topDy < 0) { + newBounds.y += topDy; + } + } else { + verticalThreshold = this.visibilityRatio * newBounds.height; + topDy = this._contentBoundsNoRotate.y - boundsBottom + verticalThreshold; + bottomDy = contentBottom - newBounds.y - verticalThreshold; + if (verticalThreshold > this._contentBoundsNoRotate.height) { + newBounds.y += (topDy + bottomDy) / 2; + } else if (bottomDy < 0) { + newBounds.y += bottomDy; + } else if (topDy > 0) { + newBounds.y += topDy; + } } }