Skip to content

Commit cab6f4c

Browse files
authored
fix(safari): handle scrollingElement=body correctly (#256)
* fix positioning calculation in safari * also fix older safari versions
1 parent c934438 commit cab6f4c

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/compute.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,10 @@ export default (
243243
// https://www.quirksmode.org/blog/archives/2016/02/chrome_change_b.html
244244
const viewportWidth = window.visualViewport
245245
? window.visualViewport.width
246-
: viewport.clientWidth
246+
: Math.min(viewport.clientWidth, window.innerWidth)
247247
const viewportHeight = window.visualViewport
248248
? window.visualViewport.height
249-
: viewport.clientHeight
249+
: Math.min(viewport.clientHeight, window.innerHeight)
250250
const viewportX = window.scrollX || window.pageXOffset
251251
const viewportY = window.scrollY || window.pageYOffset
252252

@@ -316,7 +316,7 @@ export default (
316316
targetBlock = targetRect.top + targetRect.height / 2
317317
}
318318
if (viewport === frame) {
319-
blockScroll = viewportY + targetBlock - frame.clientHeight / 2
319+
blockScroll = viewportY + targetBlock - viewportHeight / 2
320320
} else {
321321
// prevent negative scrollTop values
322322
const offset =
@@ -335,7 +335,7 @@ export default (
335335
targetBlock = targetRect.bottom
336336
}
337337
if (viewport === frame) {
338-
blockScroll = viewportY + targetBlock - frame.clientHeight
338+
blockScroll = viewportY + targetBlock - viewportHeight
339339
} else {
340340
// prevent negative scrollTop values
341341
const offset =
@@ -399,7 +399,7 @@ export default (
399399
targetInline = targetRect.left + targetRect.width / 2
400400
}
401401
if (viewport === frame) {
402-
inlineScroll = viewportX + targetInline - frame.clientWidth / 2
402+
inlineScroll = viewportX + targetInline - viewportWidth / 2
403403
} else {
404404
// prevent negative scrollLeft values
405405
const offset =
@@ -418,7 +418,7 @@ export default (
418418
targetInline = targetRect.right
419419
}
420420
if (viewport === frame) {
421-
inlineScroll = viewportX + targetInline - frame.clientWidth
421+
inlineScroll = viewportX + targetInline - viewportWidth
422422
} else {
423423
// prevent negative scrollLeft values
424424
const offset =

0 commit comments

Comments
 (0)