<template>
<div class="spec-preview">
<img :src="skuImageList[imgIndex].imgUrl" />
<div @mousemove="mouseMove" class="event"></div>
<div class="big">
<img ref="big" :src="skuImageList[imgIndex].imgUrl" />
</div>
<div class="mask" ref="mask"></div>
</div>
</template>
<script>
export default {
name: "Zoom",
data() {
return {
imgIndex: 0
}
},
methods:{
mouseMove(event){
//获取蒙版div
let mask = this.$refs.mask
//放大镜图片div
let big = this.$refs.big
//获取蒙版的左边位置和顶部位置
let left = event.offsetX - mask.offsetWidth/2
let top = event.offsetY - mask.offsetHeight/2
//左边小于0 那么left就等于0
if(left < 0){
left = 0
}
//左边大于mask蒙版的宽度 那左边的位置就是当前蒙版的宽 蒙版是大div的1/2
if(left > mask.offsetWidth){
left = mask.offsetWidth
}
if(top < 0){
top = 0
}
if(top > mask.offsetHeight){
top = mask.offsetHeight
}
//蒙版移动
mask.style.left = left+'px';
mask.style.top = top+'px';
//放大镜图 移动
big.style.left = -left*2+'px'
big.style.top = -top*2+'px'
}
},
mounted() {
//接收兄弟的事件 参数
this.$bus.$on('imgIndex',(imgIndex)=>{
this.imgIndex = imgIndex
})
},
props:["skuImageList"]
}
</script>
<style lang="less">
.spec-preview {
position: relative;
width: 400px;
height: 400px;
border: 1px solid #ccc;
img {
width: 100%;
height: 100%;
}
.event {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 998;
}
.mask {
width: 50%;
height: 50%;
background-color: rgba(0, 255, 0, 0.3);
position: absolute;
left: 0;
top: 0;
display: none;
}
.big {
width: 100%;
height: 100%;
position: absolute;
top: -1px;
left: 100%;
border: 1px solid #aaa;
overflow: hidden;
z-index: 998;
display: none;
background: white;
img {
width: 200%;
max-width: 200%;
height: 200%;
position: absolute;
left: 0;
top: 0;
}
}
.event:hover~.mask,
.event:hover~.big {
display: block;
}
}
</style>