<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:05:41
        文檔

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

        vue項目中實現圖片預覽的公用組件功能:今天產品提出了一個查看影像的功能需求。 在查看單據的列表中,有一列是影像字段,一開始根據單據號調用接口查看是否有圖片附件,如果有則彈出一個全屏的彈出層,如果沒有給出提示。而且,從列表進入詳情之后,附件那邊也會有一個查看影像的按鈕。 所以,根據
        推薦度:
        導讀vue項目中實現圖片預覽的公用組件功能:今天產品提出了一個查看影像的功能需求。 在查看單據的列表中,有一列是影像字段,一開始根據單據號調用接口查看是否有圖片附件,如果有則彈出一個全屏的彈出層,如果沒有給出提示。而且,從列表進入詳情之后,附件那邊也會有一個查看影像的按鈕。 所以,根據

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

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

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

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

        廢話不多說,貼上代碼:

        <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項目中實現圖片預覽的公用組件功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        vue項目中實現圖片預覽的公用組件功能:今天產品提出了一個查看影像的功能需求。 在查看單據的列表中,有一列是影像字段,一開始根據單據號調用接口查看是否有圖片附件,如果有則彈出一個全屏的彈出層,如果沒有給出提示。而且,從列表進入詳情之后,附件那邊也會有一個查看影像的按鈕。 所以,根據
        推薦度:
        標簽: 圖片 功能 VUE
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产综合免费精品久久久| 久久精品国产亚洲AV久| 日本黄页网址在线看免费不卡| 免费H网站在线观看的| 亚洲综合久久成人69| 鲁丝片一区二区三区免费| 亚洲AV无码成人精品区天堂 | 日韩亚洲欧洲在线com91tv| 一级中文字幕免费乱码专区| 亚洲国产精品第一区二区三区| 老司机亚洲精品影院在线观看| 国产一级特黄高清免费大片| 在线亚洲v日韩v| 亚洲午夜精品久久久久久浪潮 | 日韩精品在线免费观看| 亚洲国产精品久久久久婷婷老年| 日韩免费在线观看视频| 亚洲色图黄色小说| 国产精品成人免费一区二区| 久久精品国产亚洲av瑜伽| 免费一级特黄特色大片在线| 国产精品免费久久久久电影网| 亚洲国产精品一区第二页| 亚洲成人免费电影| 亚洲国产精品99久久久久久| 亚洲成人影院在线观看| 久久青草免费91观看| 性xxxx黑人与亚洲| 免费人成在线观看网站品爱网日本| 和老外3p爽粗大免费视频| 亚洲乱亚洲乱淫久久| 在线观看免费人成视频色9| 国产精品亚洲精品日韩电影| 亚洲人JIZZ日本人| 国产免费久久精品99re丫y| 老妇激情毛片免费| 青青草原精品国产亚洲av| 日韩免费视频观看| 午夜视频在线免费观看| 亚洲精品无码av片| 亚洲av午夜福利精品一区|