亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

實現(xiàn)效果如下

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

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

封裝的子組件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 },

配置數(shù)據(jù)

data1:{
? ? ? ? name:"data1",//標識數(shù)據(jù)
? ? ? ? imgsrc:require('@/assets/timg.jpg'),//圖片路徑
? ? ? ? imgname:"img01",//圖片對應的名字 ? 用該屬性和下面的圖片數(shù)組屬性對照,用于子組件獲取索引,給默認高亮
? ? ? ? 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
? ? ? }
? ? }

子組件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:{//注冊指令
? ? 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;
? ? ? ? ? //預防鼠標彈起來后還會循環(huán)(即預防鼠標放上去的時候還會移動) ?
? ? ? ? ? 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;
? ? }
? }
}

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

相關(guān)文章

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

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

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

    vue的三種圖片引入方式代碼實例

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

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

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

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

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

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

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

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

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

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

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

    Vue-Router的使用方法

    這篇文章主要介紹了Vue-Router的使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    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)境配置不同的接口地址,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • elementUI+Springboot實現(xiàn)導出excel功能的全過程

    elementUI+Springboot實現(xiàn)導出excel功能的全過程

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

最新評論