Vue实现放大镜,但是放大图片跟着鼠标移动
Vue实现放大镜,但是放大图片跟着鼠标移动
问题出现在:ref="big"放错位置,应该放在ing中
<template> <div class="spec-preview"> <img :src= imgObj.imgUrl /> <div class="event" @mousemove="handler"></div> <div class="big" ref="big"> <img :src= imgObj.imgUrl /> </div> <div class="mask" ref="mask"></div> </div> </template>
以下为完整写出商品放大镜代码:
<template> <div class="spec-preview"> <img :src= imgObj.imgUrl /> <div class="event" @mousemove="handler"></div> <div class="big"> <img :src= imgObj.imgUrl ref="big"/> </div> <div class="mask" ref="mask"></div> </div> </template> methods:{ handler(event){ //遮罩层 let mask = this.$refs.mask; let big = this.$refs.big; //遮罩层与图片左边框距离 let left = event.offsetX - mask.offsetWidth/2; //遮罩层与图片右边框距离 let top = event.offsetY - mask.offsetHeight/2; //约束范围--当遮罩层与左边距离小于0时,遮罩层的左边固定为0; //当图片的left超过offsetWidth时,则将他的左边固定为offsetWidth if(left<=0) left=0; if(left>=mask.offsetWidth) left=mask.offsetWidth; if(top<=0) top=0; if(top>=mask.offsetHeight) top=mask.offsetHeight; //修改元素的left和top的属性值 mask.style.left = left + px; mask.style.top = top + px; //遮罩层向右移动时,放大图片往左走 //这里需要查看img的width是big的几倍,以下为2倍 big.style.left = - 2 * left+px; big.style.top = - 2 * top + px; } }
上一篇:
通过多线程提高代码的执行效率例子