基于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 相关文章推荐
自己开发Dojo的建议框架
Sep 24 Javascript
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
15款优秀的jQuery导航菜单插件分享
Jul 19 Javascript
jquery无缝向上滚动实现代码
Mar 29 Javascript
JS和函数式语言的三特性
Mar 05 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
Jan 29 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
分享12个非常实用的JavaScript小技巧
May 11 Javascript
jQuery 操作input中radio的技巧
Jul 18 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
bootstrap下拉框动态赋值方法
Aug 10 Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 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
超级实用的7个PHP代码片段分享
2012/01/05 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
js实现微博发布小功能
2017/01/12 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
Python类的用法实例浅析
2015/05/27 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
关爱残疾人演讲稿
2014/05/24 职场文书
2014年国庆节寄语
2014/09/19 职场文书
加强作风建设心得体会
2014/10/22 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书