基于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 相关文章推荐
纯CSS打造的导航菜单(附jquery版)
Aug 07 Javascript
Javascript 函数parseInt()转换时出现bug问题
May 20 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
json传值以及ajax接收详解
May 24 Javascript
详细探究ES6之Proxy代理
Jul 22 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
前端开发必知的15个jQuery小技巧
Jan 22 Javascript
JavaScript中匿名函数的递归调用
Jan 22 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
跟混乱的页面弹窗说再见
Apr 11 Javascript
JavaScript Reflect Metadata实现详解
Dec 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
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
javascript[js]获取url参数的代码
2007/10/17 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Python简单日志处理类分享
2015/02/14 Python
Python中tell()方法的使用详解
2015/05/24 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
Mac安装python3的方法步骤
2019/08/09 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
django列表筛选功能的实现代码
2020/03/27 Python
Python 防止死锁的方法
2020/07/29 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
客户接待方案
2014/02/26 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
项目验收申请报告
2015/05/15 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫