国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue項目中實現圖片預覽的公用組件功能

2019-11-19 12:37:42
字體:
來源:轉載
供稿:網友

今天產品提出了一個查看影像的功能需求。

在查看單據的列表中,有一列是影像字段,一開始根據單據號調用接口查看是否有圖片附件,如果有則彈出一個全屏的彈出層,如果沒有給出提示。而且,從列表進入詳情之后,附件那邊也會有一個查看影像的按鈕。

所以,根據需求,多個組件需要用到查看影像的功能,所以考慮做一個公用組件,通過組件傳值的方法將查看影像文件的入參傳過去。

后來,產品要求圖片可以旋轉縮放。

廢話不多說,貼上代碼:

<template>  <div class="filePreview">    <el-dialog     class="imgList"     title="預覽圖片列表"     :visible.sync="imgListShow"    @close="$emit('remove')"     fullscreen>      <div class="allImg">        <div style="width:200px;height:100%;margin-top:50px;overflow-y: auto;margin: 0 auto;">          <img v-for="(item,index) in imgList" :key="item.fileid" :src='item.furl' :class="{ changeColor:changeColor == index}" @click="handlerImg(item,index)">        </div>      </div>      <div style="width:70%;float:left">      <el-pagination        style="margin-bottom:20px;"        background        @size-change="handleSizeChange"        @current-change="handleCurrentChange1"        :current-page.sync="currentImg"        :page-size="1"        layout="prev, pager, next, jumper"        :total="num">      </el-pagination>      <div style="width:50%;text-align:center;margin:20px 0">        <button @click="rotateL" icon="el-icon-arrow-left">          <i class="el-icon-arrow-left"></i>左旋轉        </button>        <button @click="rotateR">右旋轉          <i class="el-icon-arrow-right"></i>        </button>        <button @click="scale">          <i class="el-icon-zoom-out"></i>縮小        </button>        <button @click="scale1">放大          <i class="el-icon-zoom-in"></i>        </button>      </div>      <div id="test_3" @mousemove="move" @mouseup="stop">        <p @mousedown="start" >          <img :src="furl" ref="singleImg" class="originStyle">        </p>      </div>      </div>    </el-dialog>  </div></template><script>  import {isgetFilePath}from 'api/public_api.js'  export default {    data() {      return {        imgList:[],        imgListShow:false,        num:0,        furl:'',        currentImg:1,        changeColor:-1,        currentRotate: 0 ,        currentScale:1,        canDrag: false,        offset_x:0,        offset_y:0,        mouse_x:0,        mouse_y:0,      }    },    props:['filePreviewShow','FDJH'],    created() {      this.imgListShow = this.filePreviewShow      this.preview()    },    methods: {      //點擊圖片顯示      handlerImg(obj,index){        this.currentRotate = 0        this.currentScale = 1        this.rotateScale()        this.$refs.singleImg.style.left = 0        this.$refs.singleImg.style.top = 0        this.furl = obj.furl        this.changeColor = index        this.currentImg = index+1      },      //影像      preview(){        let data = {          // FDJH:'000002'          FDJH:this.FDJH        }        isgetFilePath(data).then(res=>{          // console.log(res)          if(res.TYPE == "S"){            this.imgList = JSON.parse(res.MESSAGE)            this.num = this.imgList.length            if(this.imgList.length > 0){              this.furl = this.imgList[0].furl              this.changeColor = 0            }else{              this.$message.warning('影像文件為空')            }           }else{            this.$message.warning(res.MESSAGE)          }        })      },      handleSizeChange(val) {        console.log(`每頁 ${val} 條`);      },      handleCurrentChange1(val) {        this.currentRotate = 0        this.currentScale = 1        this.rotateScale()        this.$refs.singleImg.style.left = 0        this.$refs.singleImg.style.top = 0        this.furl = this.imgList[val-1].furl        this.changeColor = val-1      },      start(e){        //鼠標左鍵點擊        e.preventDefault && e.preventDefault(); //去掉圖片拖動響應        if(e.button==0){          this.canDrag=true;          //獲取需要拖動節點的坐標          this.offset_x = document.getElementsByClassName('originStyle')[0].offsetLeft;//x坐標          this.offset_y = document.getElementsByClassName('originStyle')[0].offsetTop;//y坐標          //獲取當前鼠標的坐標          this.mouse_x = e.pageX;          this.mouse_y = e.pageY;        }      },      move(e){        e.preventDefault && e.preventDefault()        if(this.canDrag==true){          let _x = e.pageX - this.mouse_x;          let _y = e.pageY - this.mouse_y;          //設置移動后的元素坐標          let now_x = (this.offset_x + _x ) + "px";          let now_y = (this.offset_y + _y ) + "px";          document.getElementsByClassName('originStyle')[0].style.top = now_y          document.getElementsByClassName('originStyle')[0].style.left = now_x        }      },      stop(e){        this.canDrag = false;      },      //旋轉放大      rotateScale(){        this.$refs.singleImg.style.OTransform = 'rotate('+this.currentRotate+'deg)'+'scale('+this.currentScale+')'        this.$refs.singleImg.style.webkitTransform = 'rotate('+this.currentRotate+'deg)'+'scale('+this.currentScale+')'        this.$refs.singleImg.style.MozTransform = 'rotate('+this.currentRotate+'deg)'+'scale('+this.currentScale+')'        this.$refs.singleImg.style.msTransform = 'rotate('+this.currentRotate+'deg)'+'scale('+this.currentScale+')'        this.$refs.singleImg.style.transform = 'rotate('+this.currentRotate+'deg)'+'scale('+this.currentScale+')'      },      //旋轉      rotateL(){        this.currentRotate += 15        this.rotateScale()      },      rotateR(){        this.currentRotate -= 15        this.rotateScale()      },      //縮放      scale(){        this.currentScale -= 0.1        if(this.currentScale <= 0.1){          this.currentScale = 0.1          this.rotateScale()        }else{          this.rotateScale()        }      },      scale1(){        this.currentScale += 0.1        this.rotateScale()      },    }  }</script><style rel="stylesheet/scss" lang="scss" slot-scope="scope">  .filePreview{    .imgList{      .el-dialog__headerbtn{        font-size:26px;      }      .el-dialog__body{        .allImg{          width:30%;          float:left;          height:600px;          img{            width: 150px;            height: 150px;            margin: 5px;            cursor: pointer;          }          .changeColor{            border:4px solid #409eff;          }        }      }    }    .originStyle{      position:absolute;      left:0;top:0;      cursor: pointer;      // transform-origin: 50% 50%;    }    #test_3{      position: relative;      width: 600px;      height: 400px;      overflow: hidden;      // overflow: scroll;      & > p{        position: absolute;        cursor: move;        transform-origin: center;        width: 100%;        height: 100%;        padding: 0;        -webkit-margin-before: 0;        -webkit-margin-after: 0;        left: 0;        top: 0;        & > img{          display: inline-block;          vertical-align: middle;        }      }    }  }</style>

后來出現一個問題,有一類的單據的圖片存儲在數據庫中,之前的圖片都是存儲在服務器中,只需要傳入單據號查詢返回給我圖片路徑即可。

而存儲在數據庫當中不一樣,需要拼接路徑,一下是解決方法:

preview(){    if(this.imgList.length > 0){      this.imgList.map(item=>{        item.furl = process.env.APP_EXCEL_PATH+'portal/gys/querydownloadPurchaFile?fileid='+ item.FILEID +'&gysdh='+item.CREATENAME //接口加入參      })    }    this.num = this.imgList.length    this.furl = this.imgList[0].furl    this.changeColor = 0},

一般情況下,圖片的預覽,圖片存儲在服務器中,數據庫中一般只存儲路徑。

總結

以上所述是小編給大家介紹的vue項目中實現圖片預覽的公用組件功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万州区| 安新县| 齐河县| 周口市| 漠河县| 塔城市| 普陀区| 丹东市| 沧州市| 慈利县| 五峰| 泰州市| 兴城市| 重庆市| 杂多县| 天祝| 峨边| 共和县| 龙岩市| 靖江市| 连山| 治县。| 唐河县| 文化| 九龙坡区| 台中县| 广饶县| 五家渠市| 开化县| 武宣县| 前郭尔| 公主岭市| 顺昌县| 仙居县| 图们市| 马尔康县| 抚州市| 潜江市| 兴安盟| 汕头市| 晋宁县|