vue3實(shí)現(xiàn)圖片縮放拖拽功能的示例代碼
前言
因?yàn)樾枰獙?shí)現(xiàn)圖片拖拽,縮放的功能,項(xiàng)目是vue3的所以找到這個(gè)組件,很簡(jiǎn)潔,api文檔描述的也清楚,能夠快速3分鐘內(nèi)搞完一個(gè)功能
縮放拖拽組件(v3-drag-zoom)
v3-drag-zoom 是基于 vue3 開發(fā)的一個(gè)縮放拖拽組件,方便開發(fā)者快速實(shí)現(xiàn)縮放拖拽功能。
效果類似地圖的縮放與拖拽,但是不同的是,v3-drag-zoom 可以縮放任意元素,而不僅僅是地圖。
使用場(chǎng)景:
- 地圖縮放與拖拽
- 圖片縮放與拖拽
- 任意元素縮放與拖拽
- 其他任意需要縮放與拖拽的場(chǎng)景
安裝?
使用以下命令安裝 v3-drag-zoom:
bash
npm install v3-drag-zoom # 或 yarn add v3-drag-zoom
導(dǎo)入組件?
全局導(dǎo)入?
在 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 全局樣式(必須導(dǎo)入,否則無法正常使用)
import "v3-drag-zoom/dist/style.css";
createApp(App).use(V3DragZoom).mount("#app");
按需導(dǎo)入?
在需要的組件中導(dǎo)入 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 全局導(dǎo)入也就只有 2 個(gè)組件,因此建議全局導(dǎo)入。
基本使用?
使用 v3-drag-zoom 組件包裹需要縮放與拖拽的元素即可。
如果 v3-drag-zoom 內(nèi)部存在 img 元素,則會(huì)自動(dòng)等待所有元素加載完畢后初始化,因此不需要手動(dòng)等待圖片加載完畢后再初始化。
<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參數(shù)?
v3-drag-zoom-container?
Props?
| 參數(shù)名 | 類型 | 默認(rèn)值 | 說明 |
|---|---|---|---|
| align | String | contain | 內(nèi)容對(duì)齊方式,可選值有 auto、 contain、cover |
| autoResize | Boolean | true | 是否自動(dòng)重置尺寸,當(dāng)容器尺寸為百分比的時(shí)候,會(huì)根據(jù)父容器變化而自動(dòng)變化 |
| followPointer | Boolean | true | 縮放時(shí)是否跟隨鼠標(biāo) |
| maxZoom | Float | 100 | 最大縮放倍數(shù) |
| minZoom | Float | 0.01 | 最小縮放倍數(shù) |
| zoomFactor | Float | 0.1 | 鼠標(biāo)滾輪一次的縮放比例 |
| loading | Boolean | false | 是否加載中 |
| animateDuration | Number | 200 | 縮放時(shí)候的過度動(dòng)畫時(shí)長(zhǎng),單位 ms |
Slots?
| Slot | 說明 |
|---|---|
| default | 直接填寫需要放置的內(nèi)容 |
Exposed?
| 參數(shù)名 | 類型 | 說明 |
|---|---|---|
| zoom | (zoom:Float) => void | 手動(dòng)縮放 zoom: 為縮放倍數(shù) |
| reset | () => void | 重置縮放 |
v3-drag-zoom-item?
Props?
| 參數(shù)名 | 類型 | 默認(rèn)值 | 是否必須 | 說明 |
|---|---|---|---|---|
| offset | Array | [-50,-50] | 否 | 偏移量,默認(rèn)值代表橫向和縱向均偏移 -50%,也就是對(duì)齊中心點(diǎn)位置,偏移量單位為 %, 不支持 px |
| fixedSize | Boolean | false | 否 | 是否固定大小, true代表在縮放過程中該item內(nèi)容尺寸不變 |
| rotate | Float | 0 | 否 | 旋轉(zhuǎn)角度單位 deg (360度) |
| draggable | Boolean | false | 否 | 是否可以拖拽移動(dòng) |
| position(v-model) | CurPosition | 無 | 是 | 該 item 在內(nèi)容中的位置(百分比位置) |
Slots?
| Slot | 說明 |
|---|---|
| default | 直接填寫需要放置的內(nèi)容 |
Events?
| 事件名 | 參數(shù) | 說明 |
|---|---|---|
| onMove | ( pos :Position)=> void | 每移動(dòng)一點(diǎn)距離觸發(fā),返回當(dāng)前位置 |
| onMoveFinished | ( pos :Position)=> void | 移動(dòng)結(jié)束(鼠標(biāo)抬起或超出范圍)觸發(fā), 返回當(dāng)前位置 |
CurPosition?
| 參數(shù)名 | 類型 | 默認(rèn)值 | 是否必須 | 說明 |
|---|---|---|---|---|
| x | Float | 無 | 是 | 橫向位置 % |
| y | Float | 無 | 是 | 縱向位置 % |
Position extend CurPosition?
| 參數(shù)名 | 類型 | 默認(rèn)值 | 是否必須 | 說明 |
|---|---|---|---|---|
| x | Float | 無 | 是 | 橫向位置 % |
| y | Float | 無 | 是 | 縱向位置 % |
| sub | (pos:Position)=>Position | 無 | 否 | 計(jì)算當(dāng)前 Position 與 pos 之間的差值 new Position(this.x - pos.x, this.y - pos.y); |
| add | (pos:Position)=>Position | 無 | 否 | 計(jì)算當(dāng)前 Position 與 pos 之間的和值 new Position(this.x + pos.x, this.y + p |
以上就是vue3實(shí)現(xiàn)圖片縮放拖拽功能的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于vue3圖片縮放拖拽的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何在Vue項(xiàng)目中應(yīng)用TypeScript類
與如何在React項(xiàng)目中應(yīng)用TypeScript類類似在VUE項(xiàng)目中應(yīng)用typescript,我們需要引入一個(gè)庫(kù)vue-property-decorator,需要的小伙伴可續(xù)看下文具體介紹2021-09-09
vue前端開發(fā)輔助函數(shù)狀態(tài)管理詳解示例
vue的應(yīng)用狀態(tài)管理提供了mapState、mapGetters、mapMutations、mapActions四個(gè)輔助函數(shù),所謂的輔助函數(shù)分別對(duì)State、Getters、Mutations、Actions在完成狀態(tài)的使用進(jìn)行簡(jiǎn)化2021-10-10
ElementUI表單驗(yàn)證validate和validateField的使用及區(qū)別
Element-UI作為前端框架,最常使用到的就是表單驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于ElementUI表單驗(yàn)證validate和validateField的使用及區(qū)別,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
在Vue項(xiàng)目中優(yōu)化字體文件的加載和緩存的常用方法
在現(xiàn)代 Web 開發(fā)中,字體文件通常是頁(yè)面加載時(shí)間的重要因素之一,特別是在字體文件較大或網(wǎng)絡(luò)環(huán)境不佳的情況下,用戶體驗(yàn)可能會(huì)受到影響,本文將詳細(xì)探討如何在 Vue.js 項(xiàng)目中優(yōu)化字體文件的加載和緩存,以提高頁(yè)面性能,需要的朋友可以參考下2024-09-09
vue elementUI 表單校驗(yàn)的實(shí)現(xiàn)代碼(多層嵌套)
這篇文章主要介紹了vue elementUI 表單校驗(yàn)的實(shí)現(xiàn)代碼(多層嵌套),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
vue watch關(guān)于對(duì)象內(nèi)的屬性監(jiān)聽
這篇文章主要介紹了vue watch關(guān)于對(duì)象內(nèi)的屬性監(jiān)聽的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04
Vue異步更新機(jī)制及$nextTick原理的深入講解
最近在學(xué)習(xí)一些底層方面的知識(shí),所以想做個(gè)系列嘗試去聊聊這些比較復(fù)雜又很重要的知識(shí)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Vue異步更新機(jī)制及$nextTick原理的相關(guān)資料,需要的朋友可以參考下2022-04-04
vue使用Highcharts實(shí)現(xiàn)3D餅圖
這篇文章主要為大家詳細(xì)介紹了vue使用Highcharts實(shí)現(xiàn)3D餅圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

