vue3,使用v-draggable拖动时卡顿的问题

在使用v-draggable实现拖拽功能时,发现一个问题,如果我拖拽的div里面是文字时,拖拽时就很流畅(如下图左);但是我div里面使用img 时,拖拽的时候就会很发现很明显的卡顿(如下图右)。

原因去网上搜了下,发现比较符合的就是一下几点:

1、图片加载性能问题

  • <img> 加载未优化(如大尺寸图片、未压缩、未使用懒加载)。

  • 浏览器需要额外计算图片的 布局(Layout)和渲染(Paint),导致拖动时帧率下降(FPS 降低)。

2、浏览器重绘(Repaint)开销

  • 图片比文本更复杂,拖动时浏览器需要 频繁重绘(Repaint)
  • 如果图片是 非矢量图(如 PNG/JPG),重绘成本更高。

解决方案:

pointer-events: none:让鼠标事件穿透图片,直接由外层的 div 处理拖动,减少事件计算。

完整代码:

javascript 复制代码
<template>
  <div class="box">
    <!-- 左图,文字 -->
    <div
      v-draggable="{
        bounds: 'body',
      }"
      class="draggable-class"
    >
      拖动
    </div>
    <!-- 右图,图片 -->
    <div
      v-draggable="{
        bounds: 'body',
      }"
      class="draggable-two"
    >
      <img
        :src="图片地址"
        alt="图片"
      />
    </div>
  </div>
</template>

<style lang="scss" scoped>
.box {
  width: 100%;
  height: 100%;
  background-color: #fff;

  .draggable-class {
    position: fixed;
    left: 48px;
    top: 100px;
    width: 50px;
    height: 50px;
    line-height: 50px;
    border-radius: 50%;
    font-weight: bold;
    background: #333;
    color: #fff;
    text-align: center;
    border-radius: 100%;
    box-shadow: 0 2px 4px 0 rgba(255, 133, 0, 25%);
  }

  .draggable-two {
    position: fixed;
    left: 200px;
    top: 100px;
    width: 50px;
    height: 50px;
    line-height: 50px;
    border-radius: 50%;
    img {
      width: 100%;
      height: 100%;
      pointer-events: none;
    }
  }
}
</style>
相关推荐
爱勇宝13 小时前
大多数人不是在使用 AI 赚钱,而是在帮 AI 公司赚钱
前端·后端·程序员
冬奇Lab14 小时前
每日一个开源项目(第143篇):page-agent - 纯 JS 的网页 GUI Agent,无需截图、无需插件、无需后端
前端·人工智能·agent
To_OC16 小时前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
IT_陈寒19 小时前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
追逐时光者20 小时前
别再满网找零散工具了,腾讯 QQ 浏览器这个“帮小忙”工具箱真能省时间
前端·后端
如果超人不会飞20 小时前
脉络清晰的业务演进:TinyVue Timeline 时间线组件全方位实战指南
vue.js
如果超人不会飞20 小时前
从扁平到立体:掌握 TinyVue Grid 树形表格的高级实战指南
vue.js
To_OC1 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
Asmewill1 天前
grep&curl命令学习笔记
前端
stringwu1 天前
Flutter 开发必备:MVI 架构的高效实现指南
前端·flutter