基于jquery的拖动布局插件


Posted in Javascript onNovember 25, 2011
(function($){ 
$.fn.lsMovePanel=function(){ 
var id=this.attr("id"); 
var X=Y=0; 
var offsetX=offsetY=0;//绝对位置 
var OldIndex=0;///存储原始索引 
var Temp_Li="<li id=\"Temp_Li\" style=\"background-color:#FFFFFF;border-color:#FF023C\"></li>"; 
var Move_obj;///当前拖动的对象 
$("#"+id+" li").each(function(i){ 
$(this).attr("open","0"); 
//鼠标点击 
$(this).bind("mousedown",function(){ 
if(event.button==1 || event.button==0){$(this).attr("open","1");} 
if($(this).attr("open")=="1"){ 
$(this).css({ 
cursor:"move", 
opacity:"0.7" 
}); 
X=event.clientX; 
Y=event.clientY; 
offsetX=$(this).offset().left; 
offsetY=$(this).offset().top; 
OldIndex=$(this).index(); 
$(this).css({ 
position:"absolute", 
left:offsetX, 
top:offsetY 
}); 
$("#"+id+" li").each(function(i){ 
if(i==OldIndex){ 
$(this).after(Temp_Li); 
} 
}) 
} 
}); 
//鼠标放开 
$(this).bind("mouseup",function(){ 
if(event.button==1 || event.button==0){$(this).attr("open","0");} 
if($(this).attr("open")=="0"){ 
$("#Temp_Li").before($(this)); 
$(this).animate({ 
left:$("#Temp_Li").offset().left, 
top:$("#Temp_Li").offset().top, 
},300,function(){ 
$("#Temp_Li").remove(); 
$(this).css({ 
cursor:"default", 
opacity:"1", 
position:"static" 
}); 
}); 
$("#"+id+" li").each(function(i){ 
$(this).css({ 
"border-color":"#666666" 
}); 
}); 
} 
}); 
//移动 
$(this).bind("mousemove",function(){ 
if($(this).attr("open")=="1"){ 
var current_X=current_Y=0; 
current_X=offsetX+event.clientX-X; 
current_Y=offsetY+event.clientY-Y; 
$(this).css({ 
position:"absolute", 
left:current_X, 
top:current_Y 
}); 
Move_obj=this; 
$("#"+id+" li").each(function(i){ 
if(i!=OldIndex && $(this).attr("id")!="Temp_Li"){ 
var Deviation=0; 
var Max_X=$(this).offset().left+$(this).width()-Deviation; 
var Min_X=$(this).offset().left+Deviation; 
var Max_Y=$(this).offset().top+$(this).height()-Deviation; 
var Min_Y=$(this).offset().top+Deviation; 
if((event.clientX < Max_X) && (event.clientY+$(Move_obj).height() > Max_Y) && (event.clientY+$(Move_obj).height() > Min_Y) && (event.clientX > Min_X) && (event.clientY < Max_Y) ){ 
$(this).css({ 
"border-color":"#FF7578" 
}); 
//判断覆盖对象索引值在前还是后 
if(OldIndex>$(this).index()){ 
$("#Temp_Li").before($(this)); 
$("#Temp_Li").remove(); 
$(this).before(Temp_Li); 
}else{ 
$("#Temp_Li").after($(this)); 
$("#Temp_Li").remove(); 
$(this).after(Temp_Li); 
} 
}else{ 
$(this).css({ 
"border-color":"#666666" 
}); 
} 
} 
}) 
} 
}); 
}); 
} 
})(jQuery);

调用例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> 
<title></title> 
<style> 
#Panel{ 
width:630px; 
height:auto; 
padding:0px; 
} 
#Panel li{ 
float:left; 
list-style:none; 
width:300px; 
height:100px; 
margin:5px; 
background-color:#D9F1FF; 
border:1px dotted #666666; 
text-align:center; position:static; 
} 
*{ 
font-size:12px; 
} 
</style> 
</head> 
<script src="http://demo.3water.com/jslib/jquery/jquery-1.4.2.min.js"></script> 
<script src="http://demo.3water.com/jslib/lsMovePanel.js"></script> 
<body> 
<div style="margin-left:100px;"> 
<ul id="Panel"> 
<li style="background-color:#3399FF"></li> 
<li style="background-color:#00CCFF"></li> 
<li style="background-color:#CC9900"></li> 
<li style="background-color:#FF6600"></li> 
<li style="background-color:#FFCC99"></li> 
</ul> 
</div> 
<script> 
$("#Panel").lsMovePanel(); 
</script> 
</body> 
</html>
Javascript 相关文章推荐
jquery实现submit提交表单
Feb 03 Javascript
javascript实用方法总结
Feb 06 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
Apr 27 jQuery
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
vue-cli2.9.3 详细教程
Apr 23 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
Aug 10 Javascript
一看就会的vuex实现登录验证(附案例)
Jan 09 Javascript
vue中的过滤器及其时间格式化问题
Apr 09 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
Feb 08 Javascript
jQuery Jcrop插件实现图片选取功能
Nov 23 #Javascript
JQUERY1.6 使用方法四 检测浏览器
Nov 23 #Javascript
JQuery1.6 使用方法三
Nov 23 #Javascript
jQuery1.6 使用方法二
Nov 23 #Javascript
jQuery1.6 使用方法一
Nov 23 #Javascript
JS 表单验证大全
Nov 23 #Javascript
JavaScript中的16进制字符(改进)
Nov 21 #Javascript
You might like
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
PHP中文件上传的一个问题
2010/09/04 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
Python pass 语句使用示例
2014/03/11 Python
python中List的sort方法指南
2014/09/01 Python
详细解读Python中的__init__()方法
2015/05/02 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python常用运维脚本实例小结
2020/02/14 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
应届生保险求职信
2013/11/11 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
九年级物理教学反思
2014/01/29 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
尊师重教演讲稿
2014/09/04 职场文书
会计试用期自我评价
2014/09/19 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
关于感恩的作文
2019/08/26 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
python中的被动信息搜集
2021/04/29 Python