<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這幾天做了個沒做過的元件,以此記錄下,需要的效果是在一個dom內,縮放拖拽圖片。
封裝的子元件imgbox.Vue。父元件中使用,需要在父元件中準備一個盒子用來裝圖片,在這個盒子中可以縮放拽拽圖片。
父元件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標籤的scoped屬性不能直接給子元件樣式,需要使用deep在父元件中給子元件中的dom給樣式 width: 420px;//子元件中的圖片大小 height: 280px; } /deep/ .btnbox{//深度css,由於vue中的style標籤的scoped屬性不能直接給子元件樣式,需要使用deep在父元件中給子元件中的dom給樣式 width: 70px;//子元件中按鈕盒子的大小 height: 20px; top: 20px;//子元件盒子的位置 left: 20px; .operChange{//按鈕的大小 width: 20px; height: 20px; } } }
父元件應用子元件
import imgbox from './imgbox' //拖拽,放大縮小圖片 子元件 components:{ imgbox },
設定資料
data1:{ name:"data1",//標識資料 imgsrc:require('@/assets/timg.jpg'),//圖片路徑 imgname:"img01",//圖片對應的名字 用該屬性和下面的圖片陣列屬性對照,用於子元件獲取索引,給預設高亮 scale:1,//預設縮放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 :style="scaleFun"> <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>
子元件接受父元件傳遞引數,自定義指令
export default { components:{}, props:['config'], data(){ return { imgsrc:"",//圖片的路徑 } }, directives:{//註冊指令 drag:function(el){ let dragBox = el; //獲取當前元素 dragBox.onmousedown = e => { e.preventDefault(); //算出滑鼠相對元素的位置 let disX = e.clientX - dragBox.offsetLeft; let disY = e.clientY - dragBox.offsetTop; document.onmousemove = e => { //用滑鼠的位置減去滑鼠相對元素的位置,得到元素的位置 e.preventDefault(); let left = e.clientX - disX; let top = e.clientY - disY; //移動當前元素 dragBox.style.left = left + "px"; dragBox.style.top = top + "px"; }; document.onmouseup = e => { e.preventDefault(); //滑鼠彈起來的時候不再移動 document.onmousemove = null; //預防滑鼠彈起來後還會迴圈(即預防滑鼠放上去的時候還會移動) document.onmouseup = null; }; } } }, watch:{ config:function(val){ this.imgsrc = val.imgsrc } }, computed:{ scaleFun:function(){ return `transform:scale(${this.config.scale})` } }, created(){}, methods:{ clickEnlarge(){//點選放大 let data = this.config this.$emit('enlarge',data) } ,clickNarrow(){//點選縮小 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; } } }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45