vue3 快速实现图片缩放拖拽功能

前言

因为需要实现图片拖拽,缩放的功能,项目是vue3的所以找到这个组件,很简洁,api文档描述的也清楚,能够快速3分钟内搞完一个功能

文档地址:ericfang.gitee.io/blog-vue3-v...

缩放拖拽组件(v3-drag-zoom)

v3-drag-zoom 是基于 vue3 开发的一个缩放拖拽组件,方便开发者快速实现缩放拖拽功能。

效果类似地图的缩放与拖拽,但是不同的是,v3-drag-zoom 可以缩放任意元素,而不仅仅是地图。

使用场景:

  • 地图缩放与拖拽
  • 图片缩放与拖拽
  • 任意元素缩放与拖拽
  • 其他任意需要缩放与拖拽的场景

安装

使用以下命令安装 v3-drag-zoom

bash

csharp 复制代码
npm install v3-drag-zoom
# 或
yarn add v3-drag-zoom

导入组件

全局导入

main.js 中全局引入 v3-drag-zoom

javascript 复制代码
import {createApp} from "vue";
import App from "./App.vue";
// v3-drag-zoom 组件
import V3DragZoom from "v3-drag-zoom";
// v3-drag-zoom 全局样式(必须导入,否则无法正常使用)
import "v3-drag-zoom/dist/style.css";

createApp(App).use(V3DragZoom).mount("#app");

按需导入

在需要的组件中导入 v3-drag-zoom

xml 复制代码
<script setup lang="ts">
  import {V3DragZoomContainer} from "v3-drag-zoom";
</script>

<template>
  <v3-drag-zoom-container>
    <div>需要缩放与拖拽的元素</div>
  </v3-drag-zoom-container>
</template>

由于v3-drag-zoom 全局导入也就只有 2 个组件,因此建议全局导入。

基本使用

使用 v3-drag-zoom 组件包裹需要缩放与拖拽的元素即可。

如果 v3-drag-zoom 内部存在 img 元素,则会自动等待所有元素加载完毕后初始化,因此不需要手动等待图片加载完毕后再初始化。

xml 复制代码
<script setup lang="ts"></script>

<template>
  <v3-drag-zoom-container style="width: 600px; height: 400px; background-color: #ccc">
    <div
      class="flex-column flex-same"
      style="background-color: darkred; height: 500px; width: 900px"
    >
      <div class="flex-grow flex-horiz flex-same" v-for="i in 10">
        <div class="border-box bca-border" v-for="i in 10"></div>
      </div>
    </div>
  </v3-drag-zoom-container>
</template>

API参数

v3-drag-zoom-container

Props

参数名 类型 默认值 说明
align String contain 内容对齐方式,可选值有 autocontaincover
autoResize Boolean true 是否自动重置尺寸,当容器尺寸为百分比的时候,会根据父容器变化而自动变化
followPointer Boolean true 缩放时是否跟随鼠标
maxZoom Float 100 最大缩放倍数
minZoom Float 0.01 最小缩放倍数
zoomFactor Float 0.1 鼠标滚轮一次的缩放比例
loading Boolean false 是否加载中
animateDuration Number 200 缩放时候的过度动画时长,单位 ms

Slots

Slot 说明
default 直接填写需要放置的内容

Exposed

参数名 类型 说明
zoom (zoom:Float) => void 手动缩放 zoom: 为缩放倍数
reset () => void 重置缩放

v3-drag-zoom-item

Props

参数名 类型 默认值 是否必须 说明
offset Array [-50,-50] 偏移量,默认值代表横向和纵向均偏移 -50%,也就是对齐中心点位置,偏移量单位为 %, 不支持 px
fixedSize Boolean false 是否固定大小, true代表在缩放过程中该item内容尺寸不变
rotate Float 0 旋转角度单位 deg (360度)
draggable Boolean false 是否可以拖拽移动
position(v-model) CurPosition 该 item 在内容中的位置(百分比位置)

Slots

Slot 说明
default 直接填写需要放置的内容

Events

事件名 参数 说明
onMove ( pos :Position)=> void 每移动一点距离触发,返回当前位置
onMoveFinished ( pos :Position)=> void 移动结束(鼠标抬起或超出范围)触发, 返回当前位置

CurPosition

参数名 类型 默认值 是否必须 说明
x Float 横向位置 %
y Float 纵向位置 %

Position extend CurPosition

参数名 类型 默认值 是否必须 说明
x Float 横向位置 %
y Float 纵向位置 %
sub (pos:Position)=>Position 计算当前 Position 与 pos 之间的差值 new Position(this.x - pos.x, this.y - pos.y);
add (pos:Position)=>Position 计算当前 Position 与 pos 之间的和值 new Position(this.x + pos.x, this.y + pos.y);
相关推荐
吴声子夜歌15 分钟前
ES6——Iterator和for...of循环详解
前端·javascript·es6
小李子呢021118 分钟前
前端八股3---ref和reactive
开发语言·前端·javascript
落魄江湖行22 分钟前
基础篇三 Nuxt4 组件进阶:插槽与事件传递
前端·nuxt4
kerli23 分钟前
Compose 组件:LazyColumn 核心参数与 key/contentType 详解
android·前端
好运的阿财24 分钟前
“锟斤拷”问题——程序中用powershell执行命令出现中文乱码的解决办法
linux·前端·人工智能·机器学习·架构·编辑器·vim
踩着两条虫35 分钟前
VTJ.PRO AI + 低代码实战:接入高德地图
前端·vue.js·ai编程
绝世唐门三哥36 分钟前
React性能优化:memo、useMemo和useCallback全解析
前端·react.js·memo
兔子零102438 分钟前
Claude Code 都把宠物养进终端了,我做了一个真正能长期玩的中文宠物游戏
前端·游戏·游戏开发
xiaotao13139 分钟前
Vite 与 Webpack 开发/打包时环境变量对比
前端·vue.js·webpack
摆烂工程师43 分钟前
教你如何查询 Codex 最新额度是多少,以及 ChatGPT Pro、Plus、Business 最新额度变化
前端·后端·ai编程