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

本文介绍了如何在Vue3项目中使用v3-drag-zoom组件实现图片缩放和拖拽功能,提供了全局导入方法、基本用法以及API参数详细说明,包括组件安装、props、slots和events等。
摘要由CSDN通过智能技术生成

前言

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

文档地址:https://ericfang.gitee.io/blog-vue3-vitepress/frontend-components/v3-drag-zoom.html#%E5%AE%89%E8%A3%85

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

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

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

使用场景:

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

安装

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

bash

npm install v3-drag-zoom
# 或
yarn add v3-drag-zoom

导入组件

全局导入

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

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


<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 元素,则会自动等待所有元素加载完毕后初始化,因此不需要手动等待图片加载完毕后再初始化。

<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
参数名类型默认值说明
alignStringcontain内容对齐方式,可选值有 auto、 containcover
autoResizeBooleantrue是否自动重置尺寸,当容器尺寸为百分比的时候,会根据父容器变化而自动变化
followPointerBooleantrue缩放时是否跟随鼠标
maxZoomFloat100最大缩放倍数
minZoomFloat0.01最小缩放倍数
zoomFactorFloat0.1鼠标滚轮一次的缩放比例
loadingBooleanfalse是否加载中
animateDurationNumber200缩放时候的过度动画时长,单位 ms
Slots
Slot说明
default直接填写需要放置的内容
Exposed
参数名类型说明
zoom(zoom:Float) => void手动缩放 zoom: 为缩放倍数
reset() => void重置缩放

v3-drag-zoom-item

Props
参数名类型默认值是否必须说明
offsetArray[-50,-50]偏移量,默认值代表横向和纵向均偏移 -50%,也就是对齐中心点位置,偏移量单位为 %, 不支持 px
fixedSizeBooleanfalse是否固定大小, true代表在缩放过程中该item内容尺寸不变
rotateFloat0旋转角度单位 deg (360度)
draggableBooleanfalse是否可以拖拽移动
position(v-model)CurPosition该 item 在内容中的位置(百分比位置)
Slots
Slot说明
default直接填写需要放置的内容
Events
事件名参数说明
onMove( pos :Position)=> void每移动一点距离触发,返回当前位置
onMoveFinished( pos :Position)=> void移动结束(鼠标抬起或超出范围)触发, 返回当前位置

CurPosition

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

Position extend CurPosition

参数名类型默认值是否必须说明
xFloat横向位置 %
yFloat纵向位置 %
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);
  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue实现图片缩放拖拽功能可以通过以下几个方法来实现: 1. 获取图片的实际宽高:可以使用getImgSize方法来获取图片的实际宽高,该方法返回一个Promise对象,通过Image对象的onload事件来获取图片的宽高\[2\]。 2. 初始化图片:在initImage方法中,根据盒子的大小和图片的大小来计算要显示的图片的大小。根据图片的宽高比例,确定图片的宽度和高度,并根据盒子的大小进行调整\[2\]。 3. 监听鼠标按下事件:在onmousedownHandle方法中,通过监听鼠标的移动事件来实现图片拖拽功能。通过计算鼠标移动的距离,更新图片的位置\[3\]。 4. 旋转图片:通过handleRotate方法来实现图片的旋转功能。每次点击旋转按钮时,将图片的旋转角度增加90度,并更新图片的样式\[3\]。 5. 监听鼠标滚动事件:通过监听鼠标的滚动事件来实现图片缩放功能。根据滚动的方向和速度,更新图片的大小\[2\]。 以上是实现Vue图片缩放拖拽的一些方法,你可以根据需要进行调整和扩展。 #### 引用[.reference_title] - *1* *2* *3* [Vue2 实现图片拖拽缩放、旋转](https://blog.csdn.net/Android_boom/article/details/128713466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嚣张农民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值