svg中的image的拖动

需求完成过程的主要出现的问题有以下2个:

  • 问题1:无法获取image信息
    解决方法:因为图片是放在svg之中,所以image信息的获取不能仅仅使用image标签获取,需要通过image.node才能获取
  • 问题2:拖动图片的时候,第二次拖动的时候位置会回到初始化状态
    解决方法:一开始是在鼠标移动时进行鼠标位置的记忆叠加,然后发现没有效果甚至会出现抖动,后经过研究发现应该在鼠标按下的事件中进行鼠标位置的更新
//移动图片
function move(){
	var $slide = $(".scan_result_imgs .swiper-slide.swiper-slide-active");
	var svg = $slide.find("svg")[0].instance;
    var image = svg.first();
    //是否开始拖拽 false 不拖拽
    var isDrag=false;
    var disX,disY;//鼠标相对于图片的位置
    var lastX=0,lastY=0;//上一次移动后的位置
    //鼠标按下时
    image.node.onmousedown=function(e){
    	isDrag=true;
        image.node.style.cursor = "move";
        var ePos = Util.getPosition(svg,e,1);
        //鼠标位置
        disX = lastX + ePos.x;
		disY = lastY + ePos.y;
	}
	//鼠标移动时
	document.onmousemove=function(e){
     	if(!isDrag){
        	return;
        }
        var ePos = Util.getPosition(svg,e,1);
        //鼠标位置
        var x = ePos.x;
        var y = ePos.y;
        var movex = disX - x;
        var movey = disY - y;
        lastX = movex;
        lastY = movey;
        //修改图片位置
        svg.viewbox(movex,movey,last_rw,last_rh);
	}
	//鼠标抬起时
	document.onmouseup=function(){
		isDrag=false;
        image.node.style.cursor='default';
	}
}

x,y的数值是通过项目中原来封装的方法获取的。
也可以通过以下方法获取

var x=e.clientX;
var y=e.clientY;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值