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)入,否則無(wú)法正常使用) 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)值 | 說(shuō)明 |
---|---|---|---|
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 | 說(shuō)明 |
---|---|
default | 直接填寫需要放置的內(nèi)容 |
Exposed?
參數(shù)名 | 類型 | 說(shuō)明 |
---|---|---|
zoom | (zoom:Float) => void | 手動(dòng)縮放 zoom: 為縮放倍數(shù) |
reset | () => void | 重置縮放 |
v3-drag-zoom-item?
Props?
參數(shù)名 | 類型 | 默認(rèn)值 | 是否必須 | 說(shuō)明 |
---|---|---|---|---|
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 | 無(wú) | 是 | 該 item 在內(nèi)容中的位置(百分比位置) |
Slots?
Slot | 說(shuō)明 |
---|---|
default | 直接填寫需要放置的內(nèi)容 |
Events?
事件名 | 參數(shù) | 說(shuō)明 |
---|---|---|
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)值 | 是否必須 | 說(shuō)明 |
---|---|---|---|---|
x | Float | 無(wú) | 是 | 橫向位置 % |
y | Float | 無(wú) | 是 | 縱向位置 % |
Position extend CurPosition?
參數(shù)名 | 類型 | 默認(rèn)值 | 是否必須 | 說(shuō)明 |
---|---|---|---|---|
x | Float | 無(wú) | 是 | 橫向位置 % |
y | Float | 無(wú) | 是 | 縱向位置 % |
sub | (pos:Position)=>Position | 無(wú) | 否 | 計(jì)算當(dāng)前 Position 與 pos 之間的差值 new Position(this.x - pos.x, this.y - pos.y); |
add | (pos:Position)=>Position | 無(wú) | 否 | 計(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)文章
VUE3使用Element-Plus時(shí)如何修改ElMessage中的文字大小
在使用Element-plus的Elmessage時(shí)使用默認(rèn)的size無(wú)法滿足我們的需求時(shí),我們可以自定義字體的大小,但是直接重寫樣式后,并沒有起作用,甚至使用::v-deep深度選擇器也沒有效果,本文介紹VUE3使用Element-Plus時(shí)如何修改ElMessage中的文字大小,感興趣的朋友一起看看吧2023-09-09vue3響應(yīng)式原理之Ref用法及說(shuō)明
這篇文章主要介紹了vue3響應(yīng)式原理之Ref用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Vue使用distpicker插件實(shí)現(xiàn)省市級(jí)下拉框三級(jí)聯(lián)動(dòng)
這篇文章主要介紹了Vue使用distpicker插件實(shí)現(xiàn)省市級(jí)下拉框三級(jí)聯(lián)動(dòng),比如通過JSON文件生成對(duì)應(yīng)的區(qū)域下拉框,element-china-are插件,包括distpicker插件,通過代碼講解如何使用distpicker插件實(shí)現(xiàn)省市級(jí)三聯(lián)跳動(dòng),需要的朋友可以參考下2023-02-02在Vue中實(shí)現(xiàn)深度監(jiān)聽的示例代碼
在 Vue 中,深度監(jiān)聽是指監(jiān)聽一個(gè)對(duì)象或數(shù)組的嵌套屬性(深層結(jié)構(gòu))的變化,而不僅僅是監(jiān)聽頂層屬性的引用變化,本文給大家介紹了如何在Vue中實(shí)現(xiàn)深度監(jiān)聽,并通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03vue實(shí)現(xiàn)調(diào)取手機(jī)攝像頭和相冊(cè)功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)調(diào)取手機(jī)攝像頭和相冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09如何使用el-cascader組件寫下拉級(jí)聯(lián)多選及全選功能
這篇文章主要介紹了如何使用el-cascader組件寫下拉級(jí)聯(lián)多選及全選功能,因?yàn)槭怯腥x的功能,所以不能直接使用el-cascader組件,?而是選擇使用el-select組件,?在此組件內(nèi)部使用el-cascader-panel級(jí)聯(lián)面板,感興趣的朋友跟隨小編一起看看吧2024-03-03vue實(shí)現(xiàn)列表倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)列表倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Vue設(shè)計(jì)器form-create-designer配置表單默認(rèn)值示例詳解
這篇文章主要介紹了如何使用開源項(xiàng)目form-create-designer來(lái)靈活調(diào)整表單的默認(rèn)值,通過config.formOptions,您可以自定義表單的全局布局,文章提供了一個(gè)詳細(xì)的例子,展示了如何使用form-create-designer的配置選項(xiàng)來(lái)調(diào)整表單的布局和外觀,感興趣的朋友一起看看吧2024-11-11vue動(dòng)態(tài)循環(huán)出的多個(gè)select出現(xiàn)過的變?yōu)閐isabled(實(shí)例代碼)
本文通過實(shí)例代碼給大家分享了vue動(dòng)態(tài)循環(huán)出的多個(gè)select出現(xiàn)過的變?yōu)閐isabled效果,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-11-11Vue axios 將傳遞的json數(shù)據(jù)轉(zhuǎn)為form data的例子
今天小編就為大家分享一篇Vue axios 將傳遞的json數(shù)據(jù)轉(zhuǎn)為form data的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-10-10