基于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 相关文章推荐
图片翻转效果具体实现代码
Jan 09 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
Bootstrap每天必学之表单
Nov 23 Javascript
JS DOM实现鼠标滑动图片效果
Sep 17 Javascript
js实现纯前端的图片预览
Apr 27 Javascript
详解微信小程序 页面跳转 传递参数
Dec 08 Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
Apr 20 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 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 压缩文件夹的类代码
2009/11/05 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
jQuery 联动日历实现代码
2012/05/31 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
殡葬服务心得体会
2014/09/11 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
关于python中模块和重载的问题
2021/11/02 Python