// 事件注册,调用示例:_attachEvent(document, "mousemove", moveHandler);
function _attachEvent(obj, evt, func) {
if(obj.addEventListener) {
obj.addEventListener(evt,func,true);
} else if(obj.attachEvent) {
obj.attachEvent("on"+evt,func);
} else {
eval("var old"+func+"="+obj+".on"+evt+";");
eval(obj+".on"+evt+"="+func+";");
}
}
// 事件注销,调用示例:_detachEvent(document, "mousemove", moveHandler);
function _detachEvent(obj, evt, func) {
if(obj.removeEventListener) { //DOM事件模型
obj.removeEventListener(evt,func,true);
} else if(obj.detachEvent) { //IE5+ 事件模型
obj.detachEvent("on"+evt,func);
} else { //IE事件模型
eval(obj+".on"+evt+"=old"+func+";");
}
}
// 禁止默认行为,调用示例:_cancelDefault(event);
function _cancelDefault(e)
{
if(e.preventDefault) e.preventDefault(); //2级DOM
else e.returnValue=false; //IE
}
// 阻止事件冒泡, 调用示例:_cancelBubble(event);
function _cancelBubble(e)
{
if(e.stopPropagation) e.stopPropagation(); //2 级DOM
else e.cancelBubble=true; //IE
}
function gid(id)
{
return document.getElementById(id);
}
// 激发指定对象的拖动事件,使用空的shadow,速度更快。§ 参数分别为 拖动对象, event, 方向(1水平,2垂直,null任意), 最大X坐标, 最大Y坐标
function DragByShadow(dragObj,event, direction, maxX, maxY)
{
var objShadow;
var parentOffsetLeft = 0, parentOffsetTop = 0;
var obj = dragObj;
// 先保存原来的尺寸,防止变形
dragObj.style.width = dragObj.offsetWidth;
dragObj.style.height = dragObj.offsetHeight;
// gid('dbg').innerHTML = dragObj.offsetTop;
// 处理父节点偏移量
while(obj.parentNode && obj.parentNode.tagName != "BODY")
{
parentOffsetLeft += obj.parentNode.offsetLeft;
parentOffsetTop += obj.parentNode.offsetTop;
obj = obj.parentNode;
}
if(!document.getElementById('shadow'))
{
objShadow=document.createElement("DIV");
objShadow.id = 'shadow';
objShadow.style.position='absolute';
objShadow.style.filter = 'alpha(opacity=30,style=0)';
objShadow.style.backgroundColor = '#ccc';
document.body.appendChild(objShadow);
}
else
objShadow= document.getElementById('shadow');
// 将阴影层放置在本层下面以防止遮住按钮等东西
objShadow.style.zIndex = dragObj.style.zIndex+1;
objShadow.style.left = parentOffsetLeft + dragObj.offsetLeft + 'px';
objShadow.style.top = parentOffsetTop + dragObj.offsetTop + 'px';
objShadow.style.width = dragObj.offsetWidth + 'px';
objShadow.style.height = dragObj.offsetHeight + 'px';
dragStart(objShadow,event, direction, maxX, maxY);
objShadow.style.display='none';
_attachEvent(document, 'mouseup', dragEnd);
_cancelBubble(event);
//下面禁止执行默认动作
_cancelDefault(event);
function dragEnd()
{
if(!direction)
{
// 未指定方向时,随意拖动
dragObj.style.left = objShadow.offsetLeft-parentOffsetLeft + 'px';
dragObj.style.top = objShadow.offsetTop-parentOffsetTop + 'px';
} else if( direction == 1) {
// 水平移动
dragObj.style.left = objShadow.style.left;
} else if( direction == 2) {
// 垂直移动
dragObj.style.top = objShadow.style.top;
}
// 删除阴影层,防止缓存
document.body.removeChild(objShadow);
// 注销事件
_detachEvent(document, 'mouseup', dragEnd);
//不要再让事件进一步传播.
_cancelBubble(event);
if(dragObj.layerid) //有蒙层的模块要改变蒙层的高度、宽度等。
ChangeLayer(dragObj);
}
}
// 激发指定对象的拖动事件,实时拖动。§ 参数分别为 拖动对象, event, 方向(1水平,2垂直,null任意), 最大X坐标, 最大Y坐标
function dragStart(dragObj,event, direction, maxX, maxY)
{
// 先保存原来的尺寸,防止变形
dragObj.style.width = dragObj.offsetWidth;
dragObj.style.height = dragObj.offsetHeight;
pointX=event.clientX-parseInt(dragObj.offsetLeft);
pointY=event.clientY-parseInt(dragObj.offsetTop);
_attachEvent(document, "mousemove", moveHandler);
_attachEvent(document, 'mouseup', dragEnd);
_cancelBubble(event);
//下面禁止执行默认动作
_cancelDefault(event);
function moveHandler(e) {
dragObj.style.display = '';
//把元素移动到鼠标当前的位置,根据初始鼠标点击的偏移量进行调整
if(!direction)
{
// 未指定方向时,随意拖动
dragObj.style.left=(e.clientX-pointX)+"px";
dragObj.style.top=(e.clientY-pointY)+"px";
} else if( direction == 1) {
// 水平移动
dragObj.style.left=(e.clientX-pointX)+"px";
} else if( direction == 2) {
// 垂直移动
dragObj.style.top=(e.clientY-pointY)+"px";
}
//不要再让其他元素看到该事件.
_cancelBubble(event);
}
function dragEnd()
{
// 注销事件
_detachEvent(document, 'mousemove', moveHandler);
_detachEvent(document, 'mouseup', dragEnd);
//不要再让事件进一步传播.
_cancelBubble(event);
}
}
</script>
<SCRIPT>
function $(id){return document.getElementById(id);}
</script>
<DIV onselectstart="return false" onmousedown=dragStart(this,event)
ondragstart="return false"
style="LEFT: 50px; CURSOR: move; POSITION: absolute; TOP: 220px"><IMG id=i1
title="drag me" src="/Article/ArticleImage/31/3092/JavascriptDragDrop1.jpg">随意拖动 </DIV>
<DIV onselectstart="return false" onmousedown=dragStart(this,event,1)
ondragstart="return false"
style="LEFT: 50px; CURSOR: pointer; POSITION: absolute; TOP: 50px"><IMG id=i2
title="Drag me(horizontal)" src="/Article/ArticleImage/31/3092/JavascriptDragDrop2.jpg">水平移动
</DIV>
<DIV onmouseup="$('i3').src='/Article/ArticleImage/31/3092/JavascriptDragDrop3.jpg';"
onselectstart="return false"
onmousedown="$('i3').src='/Article/ArticleImage/31/3092/JavascriptDragDrop4.jpg';dragStart(this,event,2)"
ondragstart="return false"
style="LEFT: 350px; CURSOR: pointer; POSITION: absolute; TOP:50px"><IMG id=i3
title="Drag me(vertical)" src="/Article/ArticleImage/31/3092/JavascriptDragDrop3.jpg">垂直移动
</DIV>
分享到:
相关推荐
js拖拉效果.rarjs拖拉效果.rarjs拖拉效果.rarjs拖拉效果.rarjs拖拉效果.rar
动态字段拖拉(1)动态动态字段拖拉(1)动态字段拖拉(1)字段拖拉(1)动态字段拖拉(1)
拖拉缩放效果,实现通过鼠标拖动来调整层的面积(宽高)大小。例如选框效果。 这里的拖拉缩放比一般的选框复杂一点,能设置八个方位(方向)的固定触发点,能设置最小范围,最大范围和比例缩放。 跟拖放效果一样,...
实现android拖拉效果源码,支持2.33以上版本
拖拉缩放效果,实现通过鼠标拖动来调整层的面积(宽高)大小。例如选框效果。 这里的拖拉缩放比一般的选框复杂一点,能设置八个方位(方向)的固定触发点,能设置最小范围,最大范围和比例缩放。 这里也有一个简化...
Echarts/PyQT/Flask实现的 动态实时拖拉拽大屏 ,重点的事情说三遍:自定义拖拉拽,自定义拖拉拽,自定义拖拉拽!!! YYDatav的数据可视化大屏《精彩案例汇总》(Python&Echarts源码) ... ...YYDatav的数据可视化大屏...
Android可按住拖拉的View,悬浮窗拖拉效果,超简洁实现
table的列动态手动table的列动态手动table的列动态手动table的列动态手动
game 拖拉机game 拖拉机game 拖拉机
WEB版 全功能拖拉窗口效果。 支持9方向拖拉, 移动。。 同时支持仿C#中的Anchor属性。
vc对话框,无边框窗口实现拖拉效果OnNcHitTest,OnSetCursor,OnNcLButtonDown
jquery的拖拉布局 很好用!!!!jquery的拖拉布局 很好用!!!!jquery的拖拉布局 很好用!!!!
微信小程序拖拉机
动态分割页面布局,支持拖拉分割线,功能类似于vs2010中的拖拉区域条
wince 小游戏 拖拉机(绿色版),在WINCE 6.0测试通过。
C# 拖拉控件可跨頁效果 , 使用兩個層佐容器..使拖動兩個各自的圖像作出跨頁效果
VC对话框拖拉大小,控件也随对话框的大小变大变小,右下角图标!代码清晰易懂!
在两个列表之间进行拖拉数据 可以拖入进行插入数据给对方列表框
拖拉机驾驶人科目一模拟考试系统采用《农业机械驾驶人员考试题库》,提供大中型拖拉机试题793题;小型拖拉机试题题793题;手扶式拖拉机试题733题,快来下载体验吧。 软件介绍 《拖拉机驾驶人科目一模拟考试系统》软件...