这几天做基于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 onmousemove="dragit('aryee')" onmouseup="v=0">
<div style="background:#CCC;width:100px;height:100px;position:absolute;" id="aryee" onmousedown="getV('aryee')"> </div>
</body>
分享到:
相关推荐
div 拖动 div 拖动 div 拖动 div 拖动 div 拖动 div 拖动
js加div 窗口拖动实现、js加div 窗口拖动实现、Ajax后台保存窗口属性值
jquery div拖动排序效果代码是一款打开从左到右慢慢展开,可自由拖动排序特效.
一个很好用的javaScript写的小程序,可实现div的拖动、变形。解压后直接拷到程序中就可运行
js拖动div并拖动DIV的大小,js拖动div并拖动DIV的大小
js实现div拖动功能 js实现div拖动功能 js实现div拖动功能 js实现div拖动功能
DIV图层圆边圆角的实现! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net/
DIV层拖动的实现,可改变大小.DIV层拖动的实现,可改变大小.
透明div可以拖动 Jquery特效,CSS+DIV透明div可以拖动 Jquery特效,CSS+DIV透明div可以拖动 Jquery特效,CSS+DIV
JS做的隐藏与显示DIV可拖动弹出层实例代码 学习参考
左右div可拖动【框架】
select实现div图层切换效果,使用jquery简单易懂、方便修改
DIV 拖动 JS移动DIV DIV位置移动DIV 拖动 JS移动DIV DIV位置移动DIV 拖动 JS移动DIV DIV位置移动DIV 拖动 JS移动DIV DIV位置移动
JQ JS javascript layui UI组件 元素 div 拖动插件JQ JS javascript layui UI组件 元素 div 拖动插件
遮罩 DIV 拖动 jquery遮罩 DIV 拖动 jquery遮罩 DIV 拖动 jquery遮罩 DIV 拖动 jquery
Jquery Sortable实现div拖动排序效果 Jquery Sortable实现div拖动排序效果
漂亮的DIV可拖动弹出窗口(精品) 漂亮的DIV可拖动弹出窗口(精品)
div拖动基础div拖动基础div拖动基础div拖动基础
今天有个需求,要实现弹框,并且需要能过拖动位置,放大缩小等功能,这里是一个纯JS实现拖动的例子,有需要完整案例,或者其他功能可以私信,我懂的都会帮你
div的图层切换函数 简单,通用,代码少,希望共享!