基于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 相关文章推荐
JavaScript 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
Jquery下attr和removeAttr的使用方法
Dec 28 Javascript
Javascript中的call()方法介绍
Mar 15 Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
浅析JSONP技术原理及实现
Jun 08 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
Aug 31 Javascript
详解vue嵌套路由-params传递参数
May 23 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 Javascript
Vuex 快速入门(简单易懂)
Sep 20 Javascript
如何实现一个简易版的vuex持久化工具
Sep 11 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
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
微信小程序实现录音功能
2019/11/22 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
Python遍历numpy数组的实例
2018/04/04 Python
详解Python with/as使用说明
2018/12/13 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
Python实现点云投影到平面显示
2020/01/18 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
优秀毕业生推荐信
2013/11/02 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
殡葬服务心得体会
2014/09/11 职场文书
商务信函英语问候语
2015/11/10 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
nginx 添加http_stub_status_module模块
2022/05/25 Servers
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL