您好,登錄后才能下訂單哦!
這篇“vue怎么實(shí)現(xiàn)圖片縮放”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“vue怎么實(shí)現(xiàn)圖片縮放”文章吧。
這幾天做了個(gè)沒做過的組件,以此記錄下,需要的效果是在一個(gè)dom內(nèi),縮放拖拽圖片。
封裝的子組件imgbox.Vue。父組件中使用,需要在父組件中準(zhǔn)備一個(gè)盒子用來裝圖片,在這個(gè)盒子中可以縮放拽拽圖片。
父組件html部分
<!-- 普通方形盒子 --> <div class="box1"> <imgbox :config="data1" @enlarge="enlargeImg" @narrow="narrowImg" @changeImg="change"></imgbox> </div>
父組件的css部分
.box1{ width: 300px; height: 300px; border: 1px solid #000; /deep/ .dragImg{//深度css,由于vue中的style標(biāo)簽的scoped屬性不能直接給子組件樣式,需要使用deep在父組件中給子組件中的dom給樣式 width: 420px;//子組件中的圖片大小 height: 280px; } /deep/ .btnbox{//深度css,由于vue中的style標(biāo)簽的scoped屬性不能直接給子組件樣式,需要使用deep在父組件中給子組件中的dom給樣式 width: 70px;//子組件中按鈕盒子的大小 height: 20px; top: 20px;//子組件盒子的位置 left: 20px; .operChange{//按鈕的大小 width: 20px; height: 20px; } } }
父組件應(yīng)用子組件
import imgbox from './imgbox' //拖拽,放大縮小圖片 子組件 components:{ imgbox },
配置數(shù)據(jù)
data1:{ name:"data1",//標(biāo)識數(shù)據(jù) imgsrc:require('@/assets/timg.jpg'),//圖片路徑 imgname:"img01",//圖片對應(yīng)的名字 用該屬性和下面的圖片數(shù)組屬性對照,用于子組件獲取索引,給默認(rèn)高亮 scale:1,//默認(rèn)縮放1 }
方法
enlargeImg:function(val){//放大圖片 this[val.name].scale = this[val.name].scale + 0.1 } ,narrowImg:function(val){//縮小圖片 if(this[val.name].scale >= 0.1){ this[val.name].scale = this[val.name].scale - 0.1 } }
子組件html部分
<template> <div class="myDiv"> <img class="dragImg" ref="img" name="removeImg" :src="imgsrc" v-drag :> <div class="btnbox" :ref="config.ref"> <img src="../assets/operaImg2.png" title="放大" @click="clickEnlarge" class="operChange"> <img src="../assets/operaImg3.png" title="縮小" @click="clickNarrow" class="operChange"> </div> </div> </template>
子組件接受父組件傳遞參數(shù),自定義指令
export default { components:{}, props:['config'], data(){ return { imgsrc:"",//圖片的路徑 } }, directives:{//注冊指令 drag:function(el){ let dragBox = el; //獲取當(dāng)前元素 dragBox.onmousedown = e => { e.preventDefault(); //算出鼠標(biāo)相對元素的位置 let disX = e.clientX - dragBox.offsetLeft; let disY = e.clientY - dragBox.offsetTop; document.onmousemove = e => { //用鼠標(biāo)的位置減去鼠標(biāo)相對元素的位置,得到元素的位置 e.preventDefault(); let left = e.clientX - disX; let top = e.clientY - disY; //移動(dòng)當(dāng)前元素 dragBox.style.left = left + "px"; dragBox.style.top = top + "px"; }; document.onmouseup = e => { e.preventDefault(); //鼠標(biāo)彈起來的時(shí)候不再移動(dòng) document.onmousemove = null; //預(yù)防鼠標(biāo)彈起來后還會(huì)循環(huán)(即預(yù)防鼠標(biāo)放上去的時(shí)候還會(huì)移動(dòng)) document.onmouseup = null; }; } } }, watch:{ config:function(val){ this.imgsrc = val.imgsrc } }, computed:{ scaleFun:function(){ return `transform:scale(${this.config.scale})` } }, created(){}, methods:{ clickEnlarge(){//點(diǎn)擊放大 let data = this.config this.$emit('enlarge',data) } ,clickNarrow(){//點(diǎn)擊縮小 let data = this.config this.$emit('narrow',data) } }, }
子組件css
.myDiv{ width: 100%; height: 100%; position: relative; overflow: hidden; img{ width: 100%; height: 100%; position: relative; } .btnbox{ display: flex; position: absolute; top: 20px; left: 20px; width: 70px; height: 20px; justify-content: space-around; z-index: 99; img{ width: 20px; height: 20px; opacity: 0.7; cursor: pointer; display: inline-block; } } }
以上就是關(guān)于“vue怎么實(shí)現(xiàn)圖片縮放”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。