div拖拽插件——JQ.MoveBox.js(自制JQ插件)


Posted in Javascript onMay 17, 2013

有一段时间没更新博客了,都不知道忙些什么,学习也没什么进展,惭愧。
这一周空闲的时间学着自己写一下JQ插件。

以前用原生的JS做过类似拖拽div的效果,现在按原思路改做成一个JQ的小插件,当作制作JQ插件的一个小练习。
html为

<!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 type="text/css"> 
*{margin:0;padding:0;} 
#box{width:500px;height:500px;margin:200px auto;position:relative;border:1px solid #ccc;border-left:2px solid #ccc;} 
.float-box{width:100px;height:100px;background:#000;color:#fff;position:absolute;top:20px;left:10px;cursor:move;z-index:2;border:2px solid #ccc;border-right:10px solid #fc0;} 
.float-box1{width:200px;height:200px;background:#f30;color:#fff;position:absolute;top:0;left:200px;cursor:move;border-top:10px solid #000;} 
</style> 
</head> 
<body> 
<div id="box"> 
<div class="float-box"></div> 
<div class="float-box1"></div> 
</div> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
<script type="text/javascript" src="JQ.MoveBox.js"></script> 
<script type="text/javascript"> 
$(".float-box").MoveBox(); 
$(".float-box1").MoveBox({out:true}); 
</script> 
</body> 
</html>

下面为JQ.MoveBox.js
(function($){ 
var n = 1; 
var o = {} 
$.fn.MoveBox=function(options){ 
var opts = $.extend({}, $.fn.MoveBox.defaults, options); 
return this.each(function(i){ 
$(this).mousedown(function(e){ 
o.iTop = $(this).position().top - e.pageY; 
o.iLeft = $(this).position().left - e.pageX; 
n++; 
$this = $(this); 
$this.css({'z-index':n}); 
$(document).bind("mousemove",function(e){ 
var iLeft = e.pageX + o.iLeft; 
var iTop = e.pageY + o.iTop; 
if(opts.out){ 
if(iLeft<-$this.parent().offset().left-parseInt($this.parent().css("border-left-width"))){ 
iLeft = -$this.parent().offset().left-parseInt($this.parent().css("border-left-width")); 
}else if(iLeft>$(document).width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width"))-$this.parent().offset().left-parseInt($this.parent().css("border-left-width"))){ 
iLeft = $(document).width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width"))-$this.parent().offset().left-parseInt($this.parent().css("border-left-width")); 
} 
if(iTop<-$this.parent().offset().top-parseInt($this.parent().css("border-top-width"))+$(document).scrollTop()){ 
iTop = -$this.parent().offset().top-parseInt($this.parent().css("border-top-width"))+$(document).scrollTop(); 
}else if(iTop>$(window).height()+$(document).scrollTop()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width"))-$this.parent().offset().top-parseInt($this.parent().css("border-top-width"))){ 
iTop = $(window).height()+$(document).scrollTop()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width"))-$this.parent().offset().top-parseInt($this.parent().css("border-top-width")); 
} 
}else{ 
if(iLeft<0){ 
iLeft = 0; 
}else if(iLeft>$this.parent().width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width"))){ 
iLeft = $this.parent().width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width")); 
} 
if(iTop<0){ 
iTop = 0; 
}else if(iTop>$this.parent().height()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width"))){ 
iTop = $this.parent().height()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width")); 
} 
} 
$this.css({ 
'left':iLeft +"px", 
'top':iTop + "px" 
}) 
}); 
$(document).bind("mouseup",function(){ 
$(document).unbind("mousemove"); 
$(document).unbind("mouseup"); 
}); 
}); 
}); 
}; $.fn.MoveBox.defaults = { 
out:false //默认不可跑出线外 
}; 
})(jQuery);
Javascript 相关文章推荐
prototype.js的Ajax对象
Sep 23 Javascript
javascript Array.remove() 数组删除
Aug 06 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
Jquery easyUI 更新行示例
Mar 06 Javascript
举例讲解JavaScript substring()的使用方法
Nov 09 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
Nov 24 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
Aug 10 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
vue element table中自定义一些input的验证操作
Jul 18 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 Javascript
如何让vue长列表快速加载
Mar 29 Vue.js
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 #Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 #Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 #Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 #Javascript
javascript检测页面是否缩放的小例子
May 16 #Javascript
js获取键盘按键响应事件(兼容各浏览器)
May 16 #Javascript
js如何获取file控件的完整路径具体实现代码
May 15 #Javascript
You might like
一个查看session内容的函数
2006/10/09 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
js href的用法
2010/05/13 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
python2.7的编码问题与解决方法
2016/10/04 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
见习期自我鉴定
2013/11/07 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
销售总经理岗位职责
2014/03/15 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
租房协议书范例
2014/10/14 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript