当前位置:首页 > VUE

vue实现拖拽滚动

2026-01-17 11:29:00VUE

Vue 实现拖拽滚动的方法

在 Vue 中实现拖拽滚动功能,可以通过监听鼠标事件并结合 CSS 或 JavaScript 控制滚动行为。以下是几种常见的实现方式:

使用原生事件监听

通过监听 mousedownmousemovemouseup 事件,结合 scrollLeftscrollTop 属性实现拖拽滚动。

<template>
  <div
    ref="scrollContainer"
    class="scroll-container"
    @mousedown="startDrag"
    @mousemove="onDrag"
    @mouseup="endDrag"
    @mouseleave="endDrag"
  >
    <div class="content">
      <!-- 可滚动内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isDragging: false,
      startX: 0,
      startY: 0,
      scrollLeft: 0,
      scrollTop: 0,
    };
  },
  methods: {
    startDrag(e) {
      this.isDragging = true;
      this.startX = e.pageX;
      this.startY = e.pageY;
      this.scrollLeft = this.$refs.scrollContainer.scrollLeft;
      this.scrollTop = this.$refs.scrollContainer.scrollTop;
    },
    onDrag(e) {
      if (!this.isDragging) return;
      const x = e.pageX;
      const y = e.pageY;
      const walkX = (this.startX - x) * 2; // 调整拖拽灵敏度
      const walkY = (this.startY - y) * 2;
      this.$refs.scrollContainer.scrollLeft = this.scrollLeft + walkX;
      this.$refs.scrollContainer.scrollTop = this.scrollTop + walkY;
    },
    endDrag() {
      this.isDragging = false;
    },
  },
};
</script>

<style>
.scroll-container {
  overflow: auto;
  cursor: grab;
}
.scroll-container:active {
  cursor: grabbing;
}
</style>

使用第三方库

如果需要更复杂的拖拽滚动功能,可以使用第三方库如 vue-draggablesortablejs

安装 sortablejs

npm install sortablejs

在 Vue 中使用:

<template>
  <div ref="scrollContainer" class="scroll-container">
    <div class="content">
      <!-- 可拖拽滚动的内容 -->
    </div>
  </div>
</template>

<script>
import Sortable from 'sortablejs';

export default {
  mounted() {
    new Sortable(this.$refs.scrollContainer, {
      animation: 150,
      onStart: () => {
        this.$refs.scrollContainer.style.cursor = 'grabbing';
      },
      onEnd: () => {
        this.$refs.scrollContainer.style.cursor = 'grab';
      },
    });
  },
};
</script>

使用 CSS 属性

对于简单的拖拽滚动效果,可以直接使用 CSS 的 scroll-snap 属性实现平滑滚动。

<template>
  <div class="scroll-container">
    <div class="content">
      <!-- 内容区块 -->
    </div>
  </div>
</template>

<style>
.scroll-container {
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  cursor: grab;
}
.content {
  display: flex;
  scroll-snap-align: start;
}
</style>

注意事项

  • 拖拽滚动时需注意性能问题,避免频繁触发 mousemove 事件。
  • 移动端适配可能需要额外处理触摸事件(touchstarttouchmovetouchend)。
  • 拖拽过程中可以添加过渡动画提升用户体验。

vue实现拖拽滚动

标签: 拖拽vue
分享给朋友:

相关文章

vue实现拼音搜索

vue实现拼音搜索

实现拼音搜索的基本思路 拼音搜索的核心是将中文转换为拼音,并在用户输入拼音时匹配对应的中文内容。Vue中可以通过集成拼音转换库(如pinyin或pinyin-pro)实现这一功能。 安装拼音转换库…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed:…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm inst…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、当当、天…