easyui缩放后的拖拽问题

本文详细介绍了如何解决在EasyUI1.4.4版本中,div缩放后导致的元素拖拽问题,包括修正开始拖拽时的漂移和被拖拽元素跟随鼠标位置的问题。通过提供具体代码实现,帮助开发者正确处理缩放与拖拽之间的关系,确保交互体验流畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在浏览器中,设置某个div的缩放,使用这个方法:
function div_zoom(zoom, transformOrigin, el) {
	transformOrigin = transformOrigin || [ 0, 0 ];
	el=el || g_PlumbInstance.getContainer();
	var p = [ "-webkit-", "-moz-", "-ms-", "-o-" ];
	var s = "scale(" + zoom + ")";
	var oString = (transformOrigin[0] * 100) + "% " + (transformOrigin[1] * 100) + "%";

	for (var i = 0; i < p.length; i++) {
		el.style[p[i] + "transform"] = s;
		el.style[p[i] + "transformOrigin"] = oString;
	}

	el.style["transform"] = s;
	el.style["transformOrigin"] = oString;
};

对easyui1.4.4版本,使用draggable函数来拖拽一个zoom后的容器里面的元素,但是被拖拽元素的位置与鼠标之间存在2个问题:

  1. 开始拖拽时(鼠标按住),被拖拽元素会漂到一个不对的位置上;
  2. 鼠标移动拖拽时,被拖拽元素不跟随鼠标位置,差距越远越大。
不使用proxy时,需要修正如下:
	$("#div_plcEditorDrag").draggable({
		onBeforeDrag:function(e){
			//因为有缩放,修正开始拖拽的漂移
			e.data.startTop =Math.round(e.data.startTop / g_plcEditorZoomScale);
			e.data.startLeft=Math.round(e.data.startLeft / g_plcEditorZoomScale);
	        return true;
		},
		onStartDrag:function(e){
		},
		onDrag:function(e){
			//因为有缩放,修正被拖拽元件跟随鼠标
			var offset=$(e.data.parent).offset();
			e.data.top = (e.pageY-offset.top-e.data.offsetHeight)/g_plcEditorZoomScale;
	                e.data.left = (e.pageX-offset.left-e.data.offsetWidth)/g_plcEditorZoomScale;	        
		},
		onStopDrag:function(e){			
		}
	});//easyui的拖拽
拖拽使用proxy时,需要如下修正:
	divDrag.draggable({
		cursor : 'pointer',
		proxy : "clone",
		revert : true,
		onBeforeDrag:function(e){
			},
		onStartDrag: function (e) {
		    plc_focuseElememt(divDrag);
		    //延迟proxy,使有机会执行dblclick
	            var proxy = $(this).draggable('proxy');
	            proxy.css('z-index', 20);
	                        
	            proxy.hide();
	            setTimeout(function(){	            	
	           	 proxy.show();	           	 	
	            }, 500);
	        },
	        onDrag: function(e){
	        	//修正位置,使跟随鼠标位置
	        	var offset=$(e.data.parent).offset();
			e.data.top = (e.pageY-offset.top-e.data.offsetHeight)/g_plcEditorZoomScale;
		        e.data.left = (e.pageX-offset.left-e.data.offsetWidth)/g_plcEditorZoomScale;
	        	var proxy = $(this).draggable('proxy');
	        	if (proxy){
	        		proxy.show();
	        	}	        	
	        },
	        onStopDrag:function(e){
	        }
	});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值