在一个Iframe上面实现一个拖拽,拖拽块里面包含图片,我以为事情很简单,现在解决了。确实是简单,但是当时怎么也绕不过去!
- js
let that = this;
$(".drag").mousedown(function(e){
//设置移动后的默认位置
var endx=0;
var endy=0;
//获取div的初始位置,要注意的是需要转整型,因为获取到值带px
var left= parseInt($(".drag").css("left"));
var top = parseInt($(".drag").css("top"));
//获取鼠标按下时的坐标,区别于下面的es.pageX,es.pageY
var downx=e.pageX;
var downy=e.pageY;
$(".drag").bind('mousemove',function(es){
//es.pageX,es.pageY:获取鼠标移动后的坐标
var x= es.pageX-downx+left; //计算div的最终位置
var y=es.pageY-downy+top;
if (x < 0) {
x = 0;
} else if (x > 1280 - $('.drag').outerWidth(true)) {
x = 1280 - $('.drag').outerWidth(true);
}
if (y < 0) {
y = 0;
} else if (y > 720 - $('.drag').outerHeight(true)) {
y = 720 - $('.drag').outerHeight(true);
}
that.Band_left = x
that.Band_top = y
that.Band_leftMobile = x
that.Band_topMobile = y
$('.drag').css({
'left': x + 'px',
'top': y + 'px'
});
});
})
$(".drag").mouseup(function(){
//鼠标弹起时给div取消事件
$(".drag").unbind("mousemove")
})
- html
<div id='Band' class="drag Band" :style="{left:Band_left,top:Band_top}" >
<!-- ondragstart="return false;" -->
<img :src="Band_background" alt="" id="Bandimg" ondragstart="return false;">
<div class="BandText" v-show='UIStyle!=0'>{{Answer}}</div>
</div>
一开始拖动不了的,或者就是第一次拖动不了,需要触发一次“mouseup”之后才作用。经过排查发现是<img>在作怪,img的鼠标拖动属性为(draggable = true),或者 οndragstart=“return true”
只需要把 img属性draggable改为:draggable = true 或者 设置οndragstart=“return true”;完美解决!