From 8c77bcdc37d4475b9668b20d318dc10f294fcff7 Mon Sep 17 00:00:00 2001 From: DCloud_LXH <283700113@qq.com> Date: Tue, 10 Aug 2021 18:42:28 +0800 Subject: [PATCH] fix: createIntersectionObserver --- .../src/helpers/requestComponentObserver.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/uni-api/src/helpers/requestComponentObserver.ts b/packages/uni-api/src/helpers/requestComponentObserver.ts index f99308fc5..48693f9ca 100644 --- a/packages/uni-api/src/helpers/requestComponentObserver.ts +++ b/packages/uni-api/src/helpers/requestComponentObserver.ts @@ -19,6 +19,21 @@ function normalizeRect(rect: DOMRect) { } } +// 在相交比很小的情况下,Chrome会返回相交为0 +function rectifyIntersectionRatio(entrie: IntersectionObserverEntry) { + const { + intersectionRatio, + boundingClientRect: { height: overAllHeight, width: overAllWidth }, + intersectionRect: { height: intersectionHeight, width: intersectionWidth }, + } = entrie + + if (intersectionRatio !== 0) return intersectionRatio + + return intersectionHeight === overAllHeight + ? intersectionWidth / overAllWidth + : intersectionHeight / overAllHeight +} + export function requestComponentObserver( $el: HTMLElement, options: UniApp.CreateIntersectionObserverOptions & @@ -34,7 +49,7 @@ export function requestComponentObserver( (entries) => { entries.forEach((entrie) => { callback({ - intersectionRatio: entrie.intersectionRatio, + intersectionRatio: rectifyIntersectionRatio(entrie), intersectionRect: normalizeRect(entrie.intersectionRect), boundingClientRect: normalizeRect(entrie.boundingClientRect), relativeRect: normalizeRect(entrie.rootBounds!), -- GitLab