基于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 相关文章推荐
利用404错误页面实现UrlRewrite的实现代码
Aug 20 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
Feb 27 Javascript
JavaScript:Div层拖动效果实例代码
Aug 06 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
May 05 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
Vue 进阶教程之v-model详解
May 06 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
vue实现通讯录功能
Jul 14 Javascript
原生JS+HTML5实现的可调节写字板功能示例
Aug 30 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
Sep 02 Javascript
Vue watch响应数据实现方法解析
Jul 10 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
给多个地址发邮件的类
2006/10/09 PHP
用缓存实现静态页面的测试
2006/12/06 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
nginx下安装php7+php5
2016/07/31 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
简单学习Python time模块
2016/04/29 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python join方法使用详解
2019/07/30 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
解决python运行启动报错问题
2020/06/01 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
厂长岗位职责
2014/02/19 职场文书
作风建设演讲稿
2014/05/23 职场文书
酒店开业策划方案
2014/06/02 职场文书
单位租车协议书
2015/01/29 职场文书
2015年调度员工作总结
2015/04/30 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
Python如何让字典保持有序排列
2022/04/29 Python