JQuery实现鼠标拖动元素移动位置(源码+注释)

欢迎讨论指正!

print.html代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>发票打印</title>
</head>
<script type="text/javascript"
	src="js/jquery-2.1.1.js"></script>
<script type="text/javascript"
	src="js/print.js"></script>
<body>
	<div name="invoice">
		<div name="stuname" id="stuname">姓名:张三</div>

		<div name="feeacount" id="feeacount">金额:1000元</div>

		<div name="schoolname" id="schoolname">单位:浙江大学</div>

	</div>
</body>
</html>

 

print.js代码:

/**
 * @name print.js
 * @page print.html
 * @author mingzijian
 */
$(function() {

	// 设定元素相对原点的初始位置
	var init_x = 0;
	var init_y = 0;

	// 设定各元素的初始位置
	var _stuname = $("#stuname");
	var stuname_x = 10;
	var stuname_y = 10;
	var _feeacount = $("#feeacount");
	var feeacount_x = 10;
	var feeacount_y = 70;
	var _schoolname = $("#schoolname");
	var schoolname_x = 10;
	var schoolname_y = 40;

	var ids = [ _stuname, _feeacount, _schoolname ];
	var ids_x = [ stuname_x, feeacount_x, schoolname_x ];
	var ids_y = [ stuname_y, feeacount_y, schoolname_y ];

	// 循环添加元素移动事件监听,添加绝对定位,改变鼠标指针样式
	$.each(ids, function(i, _this) {
		_this.css({
			'position' : 'absolute',
			'cursor' : 'crosshair',
			'left' : ids_x[i],
			'top' : ids_y[i]
		});

		_this.mousedown(function(e) {
			beginmove(e, _this);
		});
	});

	// 开始移动元素位置
	function beginmove(e, _this) {
		// 当前元素的位置
		var offset = _this.offset();
		var cx = offset.left;
		var cy = offset.top;
		// 当前鼠标的位置(移动前,鼠标按下)
		var sx = e.pageX;
		var sy = e.pageY;

		// 计算当前鼠标和元素之间位置的偏移量,让移动后的元素以鼠标按下时的位置为坐标。(默认以元素左上点为坐标)
		var px = sx - cx;
		var py = sy - cy;

		// 绑定鼠标的移动事件,因为光标在DIV元素外面也要有效果,所以要用doucment的事件,而不用DIV元素的事件
		$(document).bind("mousemove", function(ev) {
			// 当前鼠标的位置(移动后,鼠标弹起)
			sx = ev.pageX;
			sy = ev.pageY;

			// 当前元素位置
			var _x = sx - px;
			var _y = sy - py;
			// 设定元素位置
			_this.css({
				'left' : _x,
				'top' : _y
			});
		});
		// 当鼠标按键弹起时,解除元素移动,让元素停留在当前位置
		$(document).mouseup(function() {
			$(this).unbind("mousemove");
			// 记录元素位置
			$.each(ids, function(i, _this) {
				// 当前元素的位置
				var offset = _this.offset();
				var cx = offset.left;
				var cy = offset.top;
				// 保存位置
				ids_x[i] = cx;
				ids_y[i] = cy;

			});

		})
	}
});

 jquery-2.1.1.js下载

案例下载

相关推荐