最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

實現(xiàn)效果如下

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

這幾天做了個沒做過的組件,以此記錄下,需要的效果是在一個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
? ? ? }
? ? }

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

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

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;
? ? }
? }
}

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

相關文章

  • Springboot+Vue-Cropper實現(xiàn)頭像剪切上傳效果

    Springboot+Vue-Cropper實現(xiàn)頭像剪切上傳效果

    這篇文章主要為大家詳細介紹了Springboot+Vue-Cropper實現(xiàn)頭像剪切上傳效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Vue項目Nginx子目錄部署(Vite和Vue-CLI)

    Vue項目Nginx子目錄部署(Vite和Vue-CLI)

    本文主要介紹了Vue項目Nginx子目錄部署(Vite和Vue-CLI),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • vue基于input實現(xiàn)密碼的顯示與隱藏功能

    vue基于input實現(xiàn)密碼的顯示與隱藏功能

    這篇文章主要介紹了vue基于input實現(xiàn)密碼的顯示與隱藏功能,文末給大家介紹了vue?如何實現(xiàn)切換密碼的顯示與隱藏效果,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • vue 實現(xiàn)axios攔截、頁面跳轉和token 驗證

    vue 實現(xiàn)axios攔截、頁面跳轉和token 驗證

    這篇文章主要介紹了vue 實現(xiàn)axios攔截、頁面跳轉和token 驗證,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • vue組件間通信子與父詳解(二)

    vue組件間通信子與父詳解(二)

    這篇文章主要為大家詳細介紹了vue組件間通信子與父的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue項目中打包優(yōu)化的四種方法詳解

    Vue項目中打包優(yōu)化的四種方法詳解

    最近入職了新公司,接手了一個新拆分出來的Vue項目,針對該項目做了個打包優(yōu)化,下面這篇文章主要給大家介紹了關于Vue項目中打包優(yōu)化的四種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Vue組件封裝之dialog對話框組件詳解

    Vue組件封裝之dialog對話框組件詳解

    這篇文章主要介紹了Vue組件封裝之dialog對話框組件,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Vue中設置el-select的高度不生效問題及解決方案

    Vue中設置el-select的高度不生效問題及解決方案

    文章介紹了如何使用ElementUI框架中的el-select組件,并解決設置其高度不生效的問題,在Vue2.x中,使用/deep/關鍵字可以穿透組件作用域修改樣式;在Vue2.6+到Vue3初期,推薦使用::v-deep關鍵字;在最新的Vue3和構建工具中,推薦使用:deep()偽類來代替::v-deep
    2025-01-01
  • 結合el-upload組件實現(xiàn)大文件分片上傳功能

    結合el-upload組件實現(xiàn)大文件分片上傳功能

    Element UI的el-upload上傳組件相信各位小伙伴都已經非常熟悉,最近接了一個新需求,要求在el-upload組件基礎上實現(xiàn)分片上傳功能,即小于等于5M文件正常上傳,大于5M文件切成5M每片上傳,那么這個功能怎么實現(xiàn)呢?一起看看吧
    2022-09-09
  • Element-UI 解決el-table中圖片懸浮被遮擋問題小結

    Element-UI 解決el-table中圖片懸浮被遮擋問題小結

    在開發(fā)中,發(fā)現(xiàn)element-ui在el-table中添加圖片懸浮顯示時,會被單元格遮擋的問題,對于此問題解決其實也并不難,將懸浮圖片放在body節(jié)點下,通過定位顯示即可,感興趣的朋友跟隨小編一起看看吧
    2024-06-06

最新評論

三江| 扬州市| 苏州市| 昔阳县| 堆龙德庆县| 高碑店市| 北京市| 涿鹿县| 渭源县| 云梦县| 宝应县| 平山县| 潜江市| 南宁市| 晋州市| 读书| 南宫市| 木兰县| 嘉荫县| 衡东县| 静宁县| 巴塘县| 仙桃市| 江阴市| 玛多县| 乌什县| 白银市| 平谷区| 金寨县| 岱山县| 宜兴市| 常山县| 微博| 儋州市| 闽清县| 永靖县| 郯城县| 陆河县| 北票市| 时尚| 重庆市|