标题: [原创] 无聊,写了个拖拽代码
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-12-25 23:11  资料  个人空间  短消息  加为好友 
无聊,写了个拖拽代码



   提示:您可以先修改部分代码再运行




<style>

    .
dragArea{
        
background-color:blue;
        
filter:alpha(opacity=50);
        -
moz-opacity:0.5;
    }

    
body{
        
margin:0px;
    }
</
style>
<
body>
<
div style="top:0px;left:0px;width:100px;height:100px;position:absolute;background:black;" onselectstart="return false;" 
onmousedown="mousedown.apply(this,arguments);">
</
div>
</
body>
<
script type="text/javascript">
/*********************************************************************** 
 *    函数名:startdrag
 *    说明:开始一段拖动行为,检查拖动行为的过程和终止并响应相应的事件。
 *    参数:
 *        parent        DOM对象,拖动所属的父对象,必需是容器,可以为document.body
 *        onmove        函数对象,事件,拖动开始后,鼠标移动触发事件
 *        onfinish    函数对象,事件,拖动结束时,触发事件一次
 *        area        对象,可以缺省,必须包含4个属性top left width height,以指定鼠标移动的有效范围,默认值为parent的全部范围。
 ***********************************************************************/

    
function startdrag(parent,onmove,onfinish,area)
    {
        var 
up,out,over;

        var 
divarea=document.createElement("div");
        if(!
area)area={
            
"top":"0px",
            
"left":"0px",
            
"width":"100%",
            
"height":"100%"
        
}
        
divarea.style.position="absolute";
        
divarea.style.top=area.top;
        
divarea.style.left=area.left;
        
divarea.style.width=area.width;
        
divarea.style.height=area.height;
        
divarea.style.overflow="hidden";
        
divarea.style.zIndex="10000";
        
divarea.className="dragArea";
        
parent.appendChild(divarea);


        if(
divarea.attachEvent)
        {
            
divarea.attachEvent("onmousemove",onmove)
            
document.attachEvent("onmouseup",up=function(){
                
divarea.detachEvent("onmousemove",onmove);
                
document.detachEvent("onmouseup",up);
                
divarea.detachEvent("onmouseout",out);
                
parent.removeChild(divarea);
                
onfinish(event||arguments[0]);
            });
            
divarea.attachEvent("onmouseout",out=function(){
                
divarea.detachEvent("onmousemove",onmove);
                
document.detachEvent("onmouseup",up);
                
divarea.detachEvent("onmouseout",out);
                
parent.removeChild(divarea);
                
onfinish(event||arguments[0]);

            });
        }

        else if(
divarea.addEventListener)
        {
            
divarea.addEventListener("mousemove",onmove,true);
            
document.addEventListener("mouseup",up=function(){
                
divarea.removeEventListener("mousemove",onmove,true);
                
document.removeEventListener("mouseup",up,true);
                
divarea.removeEventListener("mouseout",out,true);
                
parent.removeChild(divarea);
                
onfinish(event||arguments[0]);
            },
true);
            
divarea.addEventListener("mouseout",out=function(){
                
//alert("out");
                
divarea.removeEventListener("mousemove",onmove,true);
                
document.removeEventListener("mouseup",up,true);
                
divarea.removeEventListener("mouseout",out,true);
                
parent.removeChild(divarea);
                
onfinish(event||arguments[0]);
            },
true);
        }

    }
</script>
<script type="text/javascript">
function mousedown()
{
    var e=arguments[0]||event;
    var me=this;
    var dy=e.clientY-parseInt(me.style.top);
    var dx=e.clientX-parseInt(me.style.left);
    startdrag(
        document.body,
        function(e){
            e=e||event;
            if(e.clientY-dy<0||e.clientY-dy>parseInt(document.body.clientHeight)-100)return;
            if(e.clientX-dx<0||e.clientX-dx>parseInt(document.body.clientWidth)-100)return;
            me.style.top=e.clientY-dy;
            me.style.left=e.clientX-dx;
        },
        function(e){
        }
    );
}
</script> 


特色是比较封装比较灵活 附件里演示了各种变形 最重要的是 兼容IE6/IE7/FF/OP/SAFARI/NS

[[i] 本帖最后由 winter 于 2007-12-25 23:23 编辑 [/i]]



 附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
biyuan   2007-12-26 21:54  威望  +10   原创内容




顶部
曼陀罗
小恐龙
Rank: 3Rank: 3



UID 71025
精华 0
积分 347
帖子 89
威望 91
阅读权限 30
注册 2007-6-4
状态 离线
 
发表于 2007-12-25 23:31  资料  个人空间  短消息  加为好友 
代码写的很棒啊 值得我学习

顶部
ruby
爬虫
Rank: 2



UID 67790
精华 0
积分 105
帖子 24
威望 22
阅读权限 20
注册 2007-4-7
状态 离线
 
发表于 2007-12-25 23:53  资料  个人空间  短消息  加为好友 
最重要的是 兼容IE6/IE7/FF/OP/SAFARI/NS

顶部
linkent
小恐龙
Rank: 3Rank: 3



UID 8509
精华 0
积分 312
帖子 69
威望 67
阅读权限 30
注册 2004-2-14
状态 离线
 
发表于 2007-12-26 00:42  资料  个人空间  短消息  加为好友 
你这个有点特色,其它的拖动都会出窗口外而出现滚动条...

你这个在ff下没出现这现象

顶部
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-12-26 00:49  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]linkent[/i] 于 2007-12-26 00:42 发表
你这个有点特色,其它的拖动都会出窗口外而出现滚动条...

你这个在ff下没出现这现象

这个是在client代码中处理的 library代码只关心拖动时的鼠标行为 被拖动的对象的行为由使用者决定
除了帖出来的这个demo 其他例子我都没有处理滚动条





顶部
小刚
爬虫
Rank: 2



UID 53572
精华 0
积分 72
帖子 27
威望 42
阅读权限 20
注册 2006-6-25
状态 离线
 
发表于 2007-12-26 02:13  资料  个人空间  短消息  加为好友 

顶部
tugang
小恐龙
Rank: 3Rank: 3



UID 44543
精华 0
积分 266
帖子 151
威望 121
阅读权限 30
注册 2005-12-21
来自 湖北←→北京
状态 离线
 
发表于 2007-12-26 09:10  资料  个人空间  短消息  加为好友 
下载了.谢谢.晚上要好好看一遍.

顶部
km3945
霸王龙
Rank: 6Rank: 6


UID 1885
精华 0
积分 1216
帖子 591
威望 595
阅读权限 70
注册 2003-4-12
状态 离线
 
发表于 2007-12-26 10:18  资料  个人空间  短消息  加为好友 
winter 的东西一定要收藏





你叫啊!叫啊!你叫破喉咙也没人救你了!
顶部
satans17
霸王龙
Rank: 6Rank: 6


UID 31115
精华 0
积分 1089
帖子 540
威望 552
阅读权限 70
注册 2005-6-11
来自 湖北
状态 离线
 
发表于 2007-12-26 11:13  资料  个人空间  短消息  加为好友  添加 satans17 为MSN好友 通过MSN和 satans17 交谈 QQ
winter 果然强
这个东东应该加精~





http://bbs.51js.com/
顶部
iispace
小虫
Rank: 1



UID 80430
精华 0
积分 17
帖子 7
威望 7
阅读权限 10
注册 2007-12-15
状态 离线
 
发表于 2007-12-26 11:47  资料  个人空间  短消息  加为好友  添加 iispace 为MSN好友 通过MSN和 iispace 交谈
如果 我把代码 放在 ASP.NET 里面,然后点击 运行 ,FF 就不能拖动了。

错误控制台 :        onfinish(event||arguments[0]); 报错了

顶部
wlb854854
小恐龙
Rank: 3Rank: 3



UID 30682
精华 0
积分 248
帖子 60
威望 77
阅读权限 30
注册 2005-6-4
状态 离线
 
发表于 2007-12-26 11:54  资料  个人空间  短消息  加为好友 
看这样操作是否会有些问题哦...
按住不放...触碰到边缘..还是不放,拖动..是否有问题..
我这里IE下是有些问题

顶部
suiqirui1987
大恐龙
Rank: 4


UID 69621
精华 0
积分 761
帖子 261
威望 260
阅读权限 50
注册 2007-5-11
状态 离线
 
发表于 2007-12-26 12:24  资料  个人空间  主页 短消息  加为好友 
精典。。。
  下载看看了。。





我的博客:http://suiqirui19872005.cnblogs.com

人生格言:开心每一天,幸福每一刻
顶部
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-12-26 14:50  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]wlb854854[/i] 于 2007-12-26 11:54 发表
看这样操作是否会有些问题哦...
按住不放...触碰到边缘..还是不放,拖动..是否有问题..
我这里IE下是有些问题

谢谢 不过我没测出来 能详细点么? 会出什么样的问题?





顶部
myhome
霸王龙
Rank: 6Rank: 6



UID 40667
精华 0
积分 1599
帖子 538
威望 475
阅读权限 70
注册 2005-11-7
状态 离线
 
发表于 2007-12-26 16:00  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]winter[/i] 于 2007-12-26 14:50 发表

谢谢 不过我没测出来 能详细点么? 会出什么样的问题?

IE7 拖动到边缘,按住鼠标不放,继续按原方向拖动,会失去鼠标对拖动层的控制。

顶部
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-12-26 16:21  资料  个人空间  短消息  加为好友 
哦 明白了 因为没有用setCapture所以我写的这个不允许鼠标移出body范围





顶部
Rimifon (无名)
超级版主
Rank: 8Rank: 8
新手上路


UID 11749
精华 3
积分 5914
帖子 3203
威望 3193
阅读权限 150
注册 2004-5-22
来自 湖南长沙
状态 离线
 
发表于 2007-12-26 16:25  资料  个人空间  主页 短消息  加为好友  添加 Rimifon 为MSN好友 通过MSN和 Rimifon 交谈
批评一下
尽量不要用“parent”、“self”等浏览器内置的全局变量名做他用。另外,“out”在某些语言中,也是一个关键字。





風雲工作室
=========
广告位招租(做在老百姓眼皮底下的广告)
顶部
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-12-26 17:33  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]Rimifon[/i] 于 2007-12-26 16:25 发表
批评一下
尽量不要用“parent”、“self”等浏览器内置的全局变量名做他用。另外,“out”在某些语言中,也是一个关键字。

局部的 所以粗糙了点:)





顶部
咖啡刀 (飞翔的番茄)
霸王龙
Rank: 6Rank: 6


UID 63180
精华 0
积分 1045
帖子 360
威望 330
阅读权限 70
注册 2006-12-27
状态 离线
 
发表于 2007-12-27 08:31  资料  个人空间  短消息  加为好友  添加 咖啡刀 为MSN好友 通过MSN和 咖啡刀 交谈 QQ
我是2003的系统和IE6,不知道这个算不算一点不完美的表现,我这里出现了一次不能拖拽到坐标是0,0或者其他的情况,就是在4个角的地方,不能很好的一次定位!





***********^v^*************
        !人懒啥也没留下!
***********^v^*************
顶部
libinwalan
小虫
Rank: 1



UID 81495
精华 0
积分 45
帖子 17
威望 20
阅读权限 10
注册 2008-1-7
状态 离线
 
发表于 2008-1-8 20:02  资料  个人空间  主页 短消息  加为好友  QQ
不错 就是在判断浏览器的时候太复杂 可以重载函数





我知道我很菜  所以有什么问题 请随便说
顶部
AJan
小恐龙
Rank: 3Rank: 3


UID 67572
精华 0
积分 228
帖子 112
威望 113
阅读权限 30
注册 2007-4-4
来自 湖北
状态 离线
 
发表于 2008-1-9 18:01  资料  个人空间  主页 短消息  加为好友  QQ
强啊~~





http://www.AJan.cn
顶部
 



当前时区 GMT+8, 现在时间是 2010-7-31 04:42
苏ICP备05080427号

Powered by Discuz! 5.5.0  © 2001-2007 51JS.COM
Processed in 0.334323 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 无忧脚本 - Archiver