需求完成过程的主要出现的问题有以下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;