首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Vue3中平滑滚动javascript scrollLeft?

在Vue3中实现平滑滚动,可以通过JavaScript的scrollLeft属性配合requestAnimationFrame来达到目的。以下是一个基本的实现方法:

基础概念

  • scrollLeft: 是一个DOM元素的只读属性,表示元素的水平滚动条向左滚动的像素值。
  • requestAnimationFrame: 是一个浏览器提供的API,用于在下次重绘之前调用指定的函数来更新动画。

实现平滑滚动

以下是一个简单的Vue3组件示例,展示了如何使用scrollLeftrequestAnimationFrame实现平滑滚动:

代码语言:txt
复制
<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>

应用场景

  • 长页面导航: 当页面内容过长,需要水平滚动时,可以通过平滑滚动提升用户体验。
  • 轮播图: 在某些轮播图中,可能需要水平滚动切换图片,平滑滚动可以使过渡更加自然。

可能遇到的问题及解决方法

  1. 滚动不流畅: 确保在每一帧中更新scrollLeft的值,并使用requestAnimationFrame来优化性能。
  2. 滚动目标位置不准确: 确保计算targetScrollLeft的值时没有误差,可以通过调试来校准。
  3. 滚动动画被中断: 如果页面有其他JavaScript操作可能会影响到滚动动画,可以考虑使用cancelAnimationFrame来停止当前动画。

参考链接

通过上述方法,你可以在Vue3项目中实现平滑的水平滚动效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Web浏览器滚动方案一览| rAF等

在Web开发,实现流畅的滚动效果对于提升用户体验至关重要。为了实现这一目标,开发人员可以利用一系列的滚动方案。...此外,还有其他滚动方案CSS动画、滚动事件监听等等,开发人员可以根据具体需求选择合适的方案。通过合理选择和应用这些滚动方案,我们可以提供更加流畅和优化的用户体验。...Window 大小与文档大小要获取窗口大小和文档大小,我们可以使用JavaScript编程语言。...获取当前滚动获取文档或DOM元素当前滚动状态是前端开发很常见的需求。根据标准,我们可以通过元素的scrollLeft和scrollTop属性来获取其当前水平和垂直滚动的像素位置。...但是,需要注意,在旧版的WebKit内核浏览器(早期版本的Safari),这两个属性返回无效值,我们需要使用document.body来取代。

13010

Scroll,你玩明白了嘛?

今天主要聊一下关于 scroll 的应用: CSS 平滑滚动 JS 滚动方法 区分人为滚动和脚本滚动 2、CSS 平滑滚动 2.1 一行样式改善体验 在一些滚动交互比较频繁的场景,我们可以通过在可滚动容器上增加一行样式来改善用户体验...,即方法参数的 behavior 分为两种: auto:立即滚动 smooth:平滑滚动 除了上述的 3 个 api,我们还可以通过简单粗暴的 scrollTop、 scrollLeft 去设置滚动位置...2、scrollTop/scrollLeft 上文也提到 scrollTop/scrollLeft 赋值是兼容性最好的滚动方式,我们可以利用它来代替默认的 scrollIntoView () 的表现。...的 scroll-behavior,这种赋值方式也可以实现平滑滚动效果。...在人为滚动和脚本滚动的逻辑,我们通过更新 wording 这个状态,来区分当前处于人为滚动还是脚本滚动

3.1K22
  • 【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)

    ,由于el-scrollbar也不支持鼠标滚动的时候横向滚动,所以我们只能监听鼠标滚动事件,自己写一个横向滚动的方法。...scrollLeft = scrollPane.value?....wrapRef.scrollLeft scrollLeft += eventDelta / 8 scrollPane.value.setScrollLeft(scrollLeft) } 关于滚动...我们需要切换过渡效果的地方其实就是主界面显示区域那一块,文件是layout/components/AppMain.vue,这里需要注意的是,在vue3router-view嵌套使用的时候写法发生了改变...template> 这里还需要注意两个点: transition和keep-alive嵌套使用时,transition的mode不能为out-in模式,否则可能会导致页面空白或者过渡效果不生效的问题 虽然vue3

    3.9K31

    javascript中元素的scrollLeft和scrollTop属性说明

    注意:这两个属性只能用于元素设置了overflow的css样式。否者这两个属性没有任何意义。...javascript中元素的scrollLeft和scrollTop属性的参数意义: scrollLeft:是该元素的显示(可见)的内容与该元素实际的内容的距离。...即设置scrollleft就如同你拖动水平滚动条一样。假如你的页面太大,浏览器的宽度不够,就会出现滚动条。一开始scrollLeft的值为0,你就看到了你的页面最左边的内容。...而不显示超过浏览器的那部分,当你向右拖动滚动条时,scrollLeft的值在增大,你就看到了右边因隐藏的东西,而看不到左边隐藏的部分。...实现内容的滚动效果(其中内容可以是任何东西:图片,文字,等等) 1 <!

    1.4K20

    scrollwidth和clientwidth_vue监听页面滚动

    HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解 scrollHeight: 获取对象的滚动高度。...scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 scrollWidth:获取对象的滚动宽度...,clientTop: 这两个返回的是元素周围边框的厚度,如果不指定一个边框或者不定位改元素,他的值就是0. 3.scrollLeft,scrollTop: 如果元素是可以滚动的,可以通过这俩个属性得到元素在水平和垂直方向上滚动了多远...offsetLeft:Html元素相对于自己的offsetParent元素的位置 scrollLeft:返回和设置当前横向滚动务的坐标值 <input type=”button” value=”点一下...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.8K10

    Javascript获取页面元素的位置

    制作网页的过程,你有时候需要知道某个元素在网页上的确切位置。 下面的教程总结了Javascript在网页定位方面的相关知识。 一、网页的大小和浏览器窗口的大小 首先,要明确两个基本概念。...但是,在IE6的quirks模式,document.body.clientWidth返回正确的值,因此函数中加入了对文档模式的判断。...offsetParent对象未必等于父容器,所以上面的函数对于表格和iframe的元素不适用。...滚动滚动的垂直距离,是document对象的scrollTop属性;滚动滚动的水平距离是document对象的scrollLeft属性。...(图三 scrollTop和scrollLeft属性) 对上一节的两个函数进行相应的改写:   function getElementViewLeft(element){     var actualLeft

    3.3K70

    向Zepto学习关于偏移的那些事

    title: 向Zepto学习关于偏移的那些事 tags: [zepto源码分析, javascript, zepto, 源码分析] 前言 这篇文章主要想说一下Zepto与"偏移"相关的一些事,很久很久以前...用于指定一个元素在文档的定位方式,其初始值是static, css3甚至还增加了sticky等属性,不过目前貌似浏览器几乎还未支持。...scrollLeft 获取或设置页面上的滚动元素或者整个窗口向右滚动滚动距离。 scrollLeft: function (value) { if (!...pageXOffset是scrollX的别名,而其代表的含义是返回文档/页面水平方向滚动的像素值 传进来了value就是设置操作了,支持scrollLeft属性,就直接设置其值即可,反之需要用到scrollTo...,当然设置水平方向的时候,垂直方向还是要和之前的保持一致,所以传入了scrollY作为 scrollTop 获取或设置页面上的滚动元素或者整个窗口向下滚动的距离。

    90180

    一个快速的 Vue3 无限滚动组件

    在今天的教程,我们将使用 Composition API 创建一个 Vue3 无限滚动组件。这是我们将在它结束时构建的内容的预览。 如你所见,它是无限滚动,屏幕右侧的滚动条反映了这一点。...显示我们的内容 接下来,让我们实际弄清楚如何在屏幕上显示一些帖子。这就是 ListComponent.vue 组件派上用场的地方。 如果你没有任何 Vue3 经验,这段代码对你来说可能有点奇怪。...但是请查看本 Vue3 入门指南。 简而言之,Vue3 将 Options API 替换为 Composition API,这意味着代码(生命周期挂钩、数据等)都组织在一个设置方法。...那么,现在让我们继续进行激动人心的部分:无限滚动! 4. Vue3 无限滚动 现在我们已经完成了所有设置,当用户向下滚动到内容底部时,我们可以开始加载更多数据。...如果你之前在 Vue 中使用过 refs,这是一个熟悉的概念,但我们在 Vue3 设置它们的方式有点不同。

    2.1K20

    JavaScript 学习总结

    JavaScript 学习总结 第一章 认识JavaScript 1,JavaScript是什么 JavaScript是一种可以用来给网页增加交互性的编程语言。...=document.documentElement.scrollLeft || document.body.scrollLeft; oDiv.style.left=oEvent.clientX+scrollLeft...+‘px’ ;  //横向滚动处理 oDiv.style.top=oEvent.clientY+ scrollTop +‘px’ ;  //纵向滚动处理 }; 6,键盘事件 对比鼠标事件:onclick...oEvent.cancelBubble=true; 阻止事件冒泡 3、鼠标事件    鼠标点击位置:    oEvent.clientX  鼠标距可视区的左边距    oEvent.clientY  鼠标距可视区的上边距    带滚动条的滚动位置...(注意兼容性):    var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;    var

    1.4K40

    JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度(转)

    ,scrollWidth,clientWidth,offsetWidth  scrollHeight: 获取对象的滚动高度。 ...scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离  scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离  scrollWidth:获取对象的滚动宽度...(2)在随后的JavaScript代码,首先定义了两个变量winWidth和winHeight,用于保存窗口的高度值和宽度值。...(3)然后,在函数findDimensions ( ),使用window.innerHeight和window.innerWidth得到窗口的高度和宽度,并将二者保存在前述两个变量。...(6)在JavaScript代码的最后,通过调用findDimensions ( )函数,完成整个操作。

    16.1K10

    JS盒子模型

    JavaScript的盒子模型通常指的是HTML元素在页面的表示和排列方式,由浏览器处理和管理。...client开头的clientWidth 元素可视区域的宽度:内容+左右padding-滚动条的宽度clientHeight 元素可视区域的高度:内容+上下padding-滚动条的高度clientTop...scrollLeft 横向滚动条卷去的宽度scrollTop、scrollLeft是13个盒子模型属性唯二可以修改的属性(其余都是只读的,只有这两个是可改写的),通过修改对应的值,可以控制滚动条的滚动...,你可以通过访问和修改元素的样式属性来操纵和管理盒子模型的各个部分。...marginBottom = parseInt(window.getComputedStyle(element).marginBottom);这些属性可以让你获取元素在页面中所占据的空间大小,并且可以通过JavaScript

    18110

    向Zepto学习关于偏移的那些事

    原文出处:IMWeb社区 未经同意,禁止转载 ---- title: 向Zepto学习关于偏移的那些事 date: 2017-12-10 23:06:15 tags: [zepto源码分析, javascript..., zepto, 源码分析] 前言 这篇文章主要想说一下Zepto与"偏移"相关的一些事,很久很久以前,我们经常会使用offset、position、scrollTop、scrollLeft等方式去改变元素的位置...用于指定一个元素在文档的定位方式,其初始值是static, css3甚至还增加了sticky等属性,不过目前貌似浏览器几乎还未支持。...scrollLeft 获取或设置页面上的滚动元素或者整个窗口向右滚动滚动距离。 scrollLeft: function (value) { if (!...pageXOffset是scrollX的别名,而其代表的含义是返回文档/页面水平方向滚动的像素值 传进来了value就是设置操作了,支持scrollLeft属性,就直接设置其值即可,反之需要用到scrollTo

    36620

    JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth「建议收藏」

    scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 scrollWidth:获取对象的滚动宽度... var p = document.getElementByIdx_x(“p”); p.scrollTop...,clientTop: 这两个返回的是元素周围边框的厚度,如果不指定一个边框或者不定位改元素,他的值就是0. 3.scrollLeft,scrollTop: 如果元素是可以滚动的,可以通过这俩个属性得到元素在水平和垂直方向上滚动了多远...offsetLeft:Html元素相对于自己的offsetParent元素的位置 scrollLeft:返回和设置当前横向滚动务的坐标值 <script language=”javascript

    7.1K20

    htmloffsetTop、clientTop、scrollTop、offsetTop各属性介绍(转)

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight:获取对象的滚动高度 scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离...scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 scrollWidth:获取对象的滚动宽度 offsetHeight:获取对象相对与版面或由父坐标offsetParent...event.clientX+documentElement.scrollTop相对文档的水平坐标+垂直方向滚动的量 这里是JavaScript建造迁移转变代码的常用属性 网页可见区域宽:document.body.clientWidth...以上属性在 FireFox 也有效。... var p = document.getElementById("p"); p.scrollTop = 10;

    7.7K20
    领券