在Vue3中实现平滑滚动,可以通过JavaScript的scrollLeft
属性配合requestAnimationFrame
来达到目的。以下是一个基本的实现方法:
以下是一个简单的Vue3组件示例,展示了如何使用scrollLeft
和requestAnimationFrame
实现平滑滚动:
<template>
<div ref="scrollContainer" class="scroll-container">
<!-- 滚动内容 -->
<div class="scroll-content">
<!-- 这里放置你的内容 -->
</div>
</div>
</template>
<script>
import { ref, onMounted } from 'vue';
export default {
setup() {
const scrollContainer = ref(null);
let start = 0;
let currentScrollLeft = 0;
let targetScrollLeft = 0;
let animationId = null;
const smoothScrollTo = (target, duration) => {
targetScrollLeft = target;
start = performance.now();
const animateScroll = (currentTime) => {
const elapsedTime = currentTime - start;
currentScrollLeft = currentScrollLeft + (targetScrollLeft - currentScrollLeft) * (elapsedTime / duration);
scrollContainer.value.scrollLeft = currentScrollLeft;
if (elapsedTime < duration) {
animationId = requestAnimationFrame(animateScroll);
} else {
cancelAnimationFrame(animationId);
}
};
animationId = requestAnimationFrame(animateScroll);
};
onMounted(() => {
// 示例:滚动到200px的位置
smoothScrollTo(200, 1000); // 1000ms内平滑滚动到200px位置
});
return {
scrollContainer,
};
},
};
</script>
<style>
.scroll-container {
overflow-x: auto;
width: 100%;
height: 200px; /* 设置一个固定高度 */
}
.scroll-content {
width: max-content;
}
</style>
scrollLeft
的值,并使用requestAnimationFrame
来优化性能。targetScrollLeft
的值时没有误差,可以通过调试来校准。cancelAnimationFrame
来停止当前动画。通过上述方法,你可以在Vue3项目中实现平滑的水平滚动效果。
领取专属 10元无门槛券
手把手带您无忧上云