如下图,想要做一个鼠标在图片滑动,网状框跟随鼠标一起移动。遇到了很奇怪的问题,图1是正常的样子,但是当我鼠标再次移动的时候,就变成了图2。如果连续移动的话,网状框就会闪动,说白了就是第1秒网状框会跟着鼠标走,但是下一秒网状框就会回到左上角。如图3
图1
图2
网状框和商品图片都在一个div里,父级有的相对定位,网状框子级用的绝对定位。而且就此我还打印了网状框的left值,如图3
图3
下面是代码
模板
<div
class="goods_description_pic"
@mouseenter="showcheckeddetailelement=true"
@mouseleave="showcheckeddetailelement=false"
@mousemove="checkeddetailproduct($event)">
<img :src="productinformation.productimg">
<span
v-show="showcheckeddetailelement"
@mouseenter="showcheckeddetailelement=true"
class="goods_description_detailed_see"
:style="{ left: followcheckedx+'px', top: followcheckedy+'px'}"></span>
</div>
js
export default{
data(){
return {
followcheckedx: 0,
followcheckedy: 0
}
},
methods: {
checkeddetailproduct (e){
// offsetX是鼠标相对于窗口的距离
// e.clientX - e.offsetX 标签距浏览器左端的距离
this.followcheckedx = e.offsetX - 75;
this.followcheckedy = e.offsetY - 75;
if(this.followcheckedx>=150){
this.followcheckedx=150;
}
if(this.followcheckedy>=150){
this.followcheckedy=150;
}
if(this.followcheckedx<0){
this.followcheckedx=0;
}
if(this.followcheckedy<0){
this.followcheckedy=0;
}
console.log('left:' + this.followcheckedx)
}
}
}
肯定是有哪个地方疏忽了,谢谢大家帮我看一下,咱们一起学习进步
主要的问题已经找到了,如果在最外层的div上面加上mousemove事件,那么就相当于在img和span上分别加了mousemove事件,他们就会根据鼠标在自己的元素上进行重新定位,从而导致了第一秒在这里,下一秒又在另一个地方的情况。
问题已经解决,谢谢各位大神帮忙,我会尝试另外几种方法
e.offsetX 确定是相对于窗口的距离么?
应该是相对于鼠标位置元素上层父级定位为相对或绝对的元素距离 没找到就相对于body
感觉你这offsetX在 相对于网状框和相对于div盒子来回切换了 所以在变