温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

vue如何实现放大镜效果

发布时间:2021-06-26 09:21:46 来源:亿速云 阅读:532 作者:小新 栏目:web开发

这篇文章主要为大家展示了“vue如何实现放大镜效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现放大镜效果”这篇文章吧。

组件使用less,请确保已安装loader

本组件为放大镜组件,传参列表为:

•width: 必传,设置放大镜的宽高(正方形),放大区域等同,放大倍数为2倍

•picList:必传,传入图片列表

使用示例:

script:

import mirror from 'xx/mirror'  export default {   components:{    mirror   },   data(){    return {     width:300,     picList:[       xxxxxx,       xxxxxx     ],    }   }  }

html:

<mirror :width="width" :picList="picList" />

详细代码:

HTML:

<template>  <div class="mirror">    <div class="wrap" : >     <div ref="truth" : @mousemove="move" @mouseenter="showMagnify" @mouseleave="hideMagnify">     <div class="mask" ref="mask" v-show = "showMask" :></div>     <img :src="picList[picIndex]" draggable="false"/>     </div>     <div class="virtual" ref="virtual" v-if = "isShowVirtual" : >       <div class="big" ref = "bigPic" : >       </div>     </div>    </div>    <ul class="picList" :>      <li v-for = "(item,index) in picList" :class="{now:index==picIndex}" :data-index="index" :key ="item" @mouseenter="changeIndex">       <img :src ="item" />      </li>    </ul>  </div> </template>

JS:

 export default {    props:['width','picList'],//宽度是用来给放大镜的    data(){     return {      picIndex:0,      isShowVirtual:false,      showMask:false,      maskPosition:{},      percent:{},     }    },    methods:{     computedOffset(obj,prop){ //计算元素到body的绝对位置     if(obj==document.body || obj.offsetParent == document.body){      return parseInt(obj[prop])     }     return parseInt(obj[prop])+this.computedOffset(obj.offsetParent,prop)   },     changeIndex(e){      this.picIndex = e.target.dataset.index     },     showMagnify(e){      this.showMask=true;      this.isShowVirtual = true;     },     hideMagnify(){      this.isShowVirtual=false;      this.showMask=false     },     computePosition(e){       let x = e.pageX,y = e.pageY;       let mask = this.$refs.mask;       let truth = this.$refs.truth;       let virtual = this.$refs.virtual;       let bigPic = this.$refs.bigPic;       x = x-this.computedOffset(truth,'offsetLeft') -mask.offsetWidth/2;       y = y-this.computedOffset(truth,'offsetTop')- mask.offsetHeight/2;      if(x<=0) {        x=0       }else if(x>truth.offsetWidth - mask.offsetWidth){        x = truth.offsetWidth/2       }       if(y<=0){        y=0;       }       else if(y>truth.offsetHeight - mask.offsetHeight){        y = truth.offsetHeight/2       }       this.maskPosition = {        x,y       }       //计算比例       this.percent={        x:-x/(truth.offsetWidth-mask.offsetWidth)*(bigPic.offsetWidth - virtual.offsetWidth)+'px',        y:-y/(truth.offsetHeight-mask.offsetHeight)*(bigPic.offsetHeight - virtual.offsetHeight)+'px'       }     },     move(e){      this.computePosition(e)     }   }   }

CSS:

<style lang="less" scoped> .now{  border-color: cyan !important; }  .mirror{   width:100%;   .wrap{    user-select: none;    margin-bottom: 20px;    position: relative;    background-color: #fff;    border:1px solid gray;    box-sizing:border-box;      cursor: pointer;     img{      width:100%;      height:100%;     }     .virtual{      overflow:hidden;      width:100%;      height:100%;      position:absolute;      left:calc(100% + 10px);      top:0;      background-repeat:no-repeat     }     .mask{      position: absolute;      background-image: url('https://img-tmdetail.alicdn.com/tps/i4/T12pdtXaldXXXXXXXX-2-2.png');      background-repeat:repeat;      cursor: move;     }   }   .picList{    width:100%;    display: flex;    justify-content: space-between;    flex-wrap:wrap;    li{     width:50px;     height:50px;     margin:5px;     border:1px solid transparent;     box-sizing: border-box;     img{      width:100%;      height:100%     }    }   }   .picList:after{    content:"";    flex:auto;   }  } </style>

以上是“vue如何实现放大镜效果”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue
AI