DIV图层拖动原理与实现

这几天做基于Web页面的套打程序,用到了图层的拖动,在网上找了些资料,来说明原理及实现代码,总结如下:

原理图:




说明下:

O(0,0),表示窗口内容区左上角坐标;
T(x1,y1),表示拖动前,层的左上角顶点坐标;
M(xm,ym),M=Mouse,此点表示,正准备拖动瞬间,鼠标与DIV接触点的坐标;
M'(x'm,y'm),表示拖动后放手前,鼠标与DIV接触点的坐标;
T'(x?,y?),拖动后层所在的位置的左上角顶点坐标;

拖动原理:

1,鼠标按下,启动拖动
2,鼠标放手,停止拖动
3,鼠标移动,DIV的左上角顶点坐标发生变化,这种变化与鼠标的坐标有密切关系
4,拖动过程中,鼠标相对层是静止的



原理解析及实现:

对于原理1,原理2,有点像开关,我们可用一变量来实现"启动拖动","停止拖动"控制,js如下:
var v=0;
function getV(s){
v=s;
}

对于原理3,还得回头看上面图片,再结合原理4:
由于鼠标相对层是静止的,可以得出(高中物理告诉我们的):
xm-x1=x'm-x?
ym-y1=y'm-y?

变化一下:
x?=x'm-(xm-x1)
y?=y'm-(ym-y1)


为什么要求x?,y?呢?,这就是为了响应原理3,得出变化关系

接下来就是如何求的问题:

对于鼠标的X坐标,我们可以用event.clientX表示,同理,
对于鼠标的Y坐标,我们可以用event.clientY表示
(备注:仅IE)

层的左边与窗口的左边距离,用 "层.style.pixelLeft"表示;
层的顶边与窗口的顶边距离,用 "层.style.pixelTop"表示;--好像有点问题??

但是,下面的关系如何求得?
xm-x1
ym-y1

在正准备拖动瞬间,鼠标不是与拖动层有接触吗?考虑这一瞬间,就得对getV(s)进行改写啦,
function getV(s){
v=s;
var x=event.clientX-层.style.pixelLeft;
var y=event.clientY-层.style.pixelTop;
}

所以,
x?=x'm-(xm-x1)
y?=y'm-(ym-y1)

就变成:
x?=x'm-x
y?=y'm-x

即:
层.style.pixelLeft=event.clientX-x;
层.style.pixelTop=event.clientY-y;




下面是原码:

<script> 
function $(ID){ 
return document.getElementById(ID); 
} 
var v=0; 
var x,y; 
function getV(s){ 
v=s; 
x=event.clientX-$("aryee").style.pixelLeft; 
y=event.clientY-$("aryee").style.pixelTop; 
} 
function dragit(ID){ 
if(v==0){ 
return false; 
}else{ 
$(ID).style.pixelLeft=event.clientX-x; 
$(ID).style.pixelTop=event.clientY-y; 
} 
} 
</script> 
<body οnmοusemοve="dragit('aryee')" οnmοuseup="v=0"> 
<div style="background:#CCC;width:100px;height:100px;position:absolute;" id="aryee" οnmοusedοwn="getV('aryee')"> </div> 
</body> 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ReYoPrint (锐洋WEB打印控件)是一款实现网页套打的专用工具。作为web应用开发者,我们经常会遇到在浏览器中打印报表、票据的需求,这些需求浏览器本身的打印功能一般不能满足, 如精确打印,分页,套打等。这就需要有一种能解决常见的浏览器端打印问题的软件工具,这也是 ReYoPrint 的研发背景。ReYoPrint是一个ActiveX WEB打印控件(96k,支持windows7及IE8,带数字签名), 这个控件主要实现对打印参数的控制,ReYoPrint使用户通过JavaScript脚本可以控制分页,页眉页脚,页边距,打印方向,自定义纸张,直接打印,弹出打印对话框再打印,预览,放缩打印,成批打印,套打等功能 ReYoPrint 的主要功能有: 支持取得本机中的可用打印机,可用纸张类型列表,帮您设计出更友好的参数设置界面。 支持设置打印参数,纸张类型,打印方向(横、竖)等 。 支持自定义的页脚、页眉设置(支持html样式)。 支持打印区域拖拽及鼠标滚轮放大缩小功能(缩小(↓),放大(↑))。 支持程序分页与自动分页(支持ESC关闭预览窗口)。 支持打印预览,支持预览时指定页、指定份数打印。 支持直接打印指定票据的URL。 支持回调,可以帮助您在打印后自动处理有关事务,比如打印后自动关闭窗口、自动递交表单数据等。 支持票据套打时,底仅在打印预览时显示,不输出到打印机。 小巧,整个控件只有100K,不需要额外的软件包支持。 与您项目采用的技术标准无关,J2EE、.NET 项目均可。 IE 5.5+ 以上适用。 ReYoPrint与其它WEB打印控件相比具有以下的优点: 支持WEB环境下取消当前打印任务。 支持打印数据加裁状态显示。 支持网页背景色与背景片打印开关。 支持是否允许调整边距及显示边距 支持回调,可以帮助您在打印后自动处理有关事务,比如打印后自动关闭窗口、自动递交表单数据等。 支持取得本机中的可用打印机,可用纸张类型列表,帮您设计出更友好的参数设置界面。 支持自定义的页脚、页眉设置(支持html样式)及页眉页脚开关功能。 支持打印区域拖拽及鼠标滚轮放大缩小功能(缩小(↓),放大(↑))。 支持程序分页与自动分页(支持ESC关闭预览窗口)。 ReYoPrint插件的对象、属性和方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值