diff --git a/src/views/Ranking/Couple/components/topUser.vue b/src/views/Ranking/Couple/components/topUser.vue index 2c981c7..cc185b4 100644 --- a/src/views/Ranking/Couple/components/topUser.vue +++ b/src/views/Ranking/Couple/components/topUser.vue @@ -261,7 +261,7 @@
-
+
{ return Array.isArray(props.rewards?.activityRewardProps) ? props.rewards.activityRewardProps : [] @@ -385,7 +386,7 @@ let rewardRestartTimer = null let rewardAnimationFrame = null let rewardLastFrameTime = 0 let rewardLoopDistance = 0 -let rewardScrollPosition = 0 +let rewardTranslatePosition = 0 const waitForLayoutFrame = () => { return new Promise((resolve) => { @@ -414,12 +415,13 @@ const restartRewardScroll = async () => { rewardRestartTimer = setTimeout(async () => { await waitForLayoutFrame() const viewport = rewardViewportRef.value - if (!viewport || !rewardList.value.length) { + const scrollWrapper = rewardScrollRef.value + if (!viewport || !scrollWrapper || !rewardList.value.length) { rewardRestartTimer = null return } - const scrollCopies = viewport.querySelectorAll('.scroll-content') + const scrollCopies = scrollWrapper.querySelectorAll('.scroll-content') if (scrollCopies.length < 2) { rewardRestartTimer = null return @@ -434,21 +436,22 @@ const restartRewardScroll = async () => { return } - rewardScrollPosition = 0 + rewardTranslatePosition = 0 viewport.scrollLeft = 0 + scrollWrapper.style.transform = 'translate3d(0, 0, 0)' rewardLastFrameTime = performance.now() const step = (now) => { const elapsed = now - rewardLastFrameTime rewardLastFrameTime = now const distancePerMs = rewardLoopDistance / 8000 - rewardScrollPosition += distancePerMs * elapsed + rewardTranslatePosition += distancePerMs * elapsed - if (rewardScrollPosition >= rewardLoopDistance) { - rewardScrollPosition -= rewardLoopDistance + if (rewardTranslatePosition >= rewardLoopDistance) { + rewardTranslatePosition -= rewardLoopDistance } - viewport.scrollLeft = rewardScrollPosition + scrollWrapper.style.transform = `translate3d(${-rewardTranslatePosition}px, 0, 0)` rewardAnimationFrame = requestAnimationFrame(step) } @@ -478,6 +481,9 @@ onUnmounted(() => { cancelAnimationFrame(rewardAnimationFrame) rewardAnimationFrame = null } + if (rewardScrollRef.value) { + rewardScrollRef.value.style.transform = '' + } }) @@ -521,13 +527,17 @@ onUnmounted(() => { align-items: center; overflow: hidden; direction: ltr; - scroll-behavior: auto; overflow-anchor: none; } .scroll-wrapper { display: flex; width: fit-content; + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + will-change: transform; } .scroll-content {