欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)現(xiàn)vue圖片縮放方式-拖拽組件

 更新時(shí)間:2022年04月18日 08:42:48   作者:撲克king  
這篇文章主要介紹了實(shí)現(xiàn)vue圖片縮放方式-拖拽組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

實(shí)現(xiàn)效果如下

提供盒子,使用子組件實(shí)現(xiàn)圖片拖拽和放大

這幾天做了個(gè)沒(méi)做過(guò)的組件,以此記錄下,需要的效果是在一個(gè)dom內(nèi),縮放拖拽圖片。

封裝的子組件imgbox.Vue。父組件中使用,需要在父組件中準(zhǔn)備一個(gè)盒子用來(lái)裝圖片,在這個(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í)數(shù)據(jù)
? ? ? ? imgsrc:require('@/assets/timg.jpg'),//圖片路徑
? ? ? ? imgname:"img01",//圖片對(duì)應(yīng)的名字 ? 用該屬性和下面的圖片數(shù)組屬性對(duì)照,用于子組件獲取索引,給默認(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
? ? ? }
? ? }

子組件imgbox.vue如下

子組件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>

子組件接受父組件傳遞參數(shù),自定義指令

export default {
? components:{},
? props:['config'],
? data(){
? ? return {
? ? ? imgsrc:"",//圖片的路徑
? ? }
? },
? directives:{//注冊(cè)指令
? ? drag:function(el){
? ? ? let dragBox = el; //獲取當(dāng)前元素
? ? ? dragBox.onmousedown = e => {
? ? ? ? e.preventDefault();
? ? ? ? //算出鼠標(biāo)相對(duì)元素的位置
? ? ? ? let disX = e.clientX - dragBox.offsetLeft;
? ? ? ? let disY = e.clientY - dragBox.offsetTop;
? ? ? ? document.onmousemove = e => {
? ? ? ? ? //用鼠標(biāo)的位置減去鼠標(biāo)相對(duì)元素的位置,得到元素的位置
? ? ? ? ? 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)彈起來(lái)的時(shí)候不再移動(dòng)
? ? ? ? ? document.onmousemove = null;
? ? ? ? ? //預(yù)防鼠標(biāo)彈起來(lái)后還會(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;
? ? }
? }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • 五種Vue實(shí)現(xiàn)加減乘除運(yùn)算的方法總結(jié)

    五種Vue實(shí)現(xiàn)加減乘除運(yùn)算的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了五種Vue實(shí)現(xiàn)加減乘除運(yùn)算的方法,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們深入了解vue有一定的幫助,需要的可以了解下
    2023-08-08
  • vue的三種圖片引入方式代碼實(shí)例

    vue的三種圖片引入方式代碼實(shí)例

    這篇文章主要介紹了vue的三種圖片引入方式代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • vue實(shí)現(xiàn)登錄攔截

    vue實(shí)現(xiàn)登錄攔截

    這篇文章主要介紹了vue實(shí)現(xiàn)登錄攔截,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • vue2中使用axios及axios攔截器的配置教程

    vue2中使用axios及axios攔截器的配置教程

    眾所周知Axios是一個(gè)基于promise的HTTP庫(kù),可以用在瀏覽器和 node.js中,下面這篇文章主要給大家介紹了關(guān)于vue2中使用axios及axios攔截器的配置的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 解決mpvue + vuex 開發(fā)微信小程序vuex輔助函數(shù)mapState、mapGetters不可用問(wèn)題

    解決mpvue + vuex 開發(fā)微信小程序vuex輔助函數(shù)mapState、mapGetters不可用問(wèn)題

    這篇文章主要介紹了解決mpvue + vuex 開發(fā)微信小程序 vuex輔助函數(shù)mapState、mapGetters不可用問(wèn)題,需要的朋友可以參考下
    2018-08-08
  • vue中的ref/reactive區(qū)別及原理解析

    vue中的ref/reactive區(qū)別及原理解析

    Vue中的ref和reactive是兩種不同的數(shù)據(jù)響應(yīng)式管理方式,通過(guò)ref創(chuàng)建的響應(yīng)式對(duì)象在訪問(wèn)和修改時(shí)會(huì)自動(dòng)觸發(fā)重新渲染,本文給大家介紹vue中的ref/reactive區(qū)別及原理解析,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • vue.js實(shí)現(xiàn)簡(jiǎn)單輪播圖效果

    vue.js實(shí)現(xiàn)簡(jiǎn)單輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了vue.js實(shí)現(xiàn)簡(jiǎn)單輪播圖效果的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Vue-Router的使用方法

    Vue-Router的使用方法

    這篇文章主要介紹了Vue-Router的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 詳解vue+axios給開發(fā)環(huán)境和生產(chǎn)環(huán)境配置不同的接口地址

    詳解vue+axios給開發(fā)環(huán)境和生產(chǎn)環(huán)境配置不同的接口地址

    這篇文章主要介紹了詳解vue+axios給開發(fā)環(huán)境和生產(chǎn)環(huán)境配置不同的接口地址,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • elementUI+Springboot實(shí)現(xiàn)導(dǎo)出excel功能的全過(guò)程

    elementUI+Springboot實(shí)現(xiàn)導(dǎo)出excel功能的全過(guò)程

    這篇文章主要介紹了elementUI+Springboot實(shí)現(xiàn)導(dǎo)出excel功能,現(xiàn)在也對(duì)這個(gè)導(dǎo)出功能進(jìn)行一個(gè)匯總整理寫出來(lái),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評(píng)論