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 相关文章推荐
jQuery Validate 验证,校验规则写在控件中的具体实例
Feb 27 Javascript
JavaScript数据类型详解
Apr 01 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
js removeChild 方法深入理解
Aug 16 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
微信小程序实现富文本图片宽度自适应的方法
Jan 20 Javascript
微信小程序日历弹窗选择器代码实例
May 09 Javascript
微信小程序实现上传多张图片、删除图片
Jul 29 Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 Javascript
Vue3实现简易音乐播放器组件
Aug 14 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
PHP数组操作简单案例分析
2016/10/15 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
DOM 高级编程
2015/05/06 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
JS实现网页时钟特效
2020/03/25 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
21行Python代码实现拼写检查器
2016/01/25 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
Django model select的多种用法详解
2019/07/16 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
怎样让char类型的东西转换成int类型
2013/12/09 面试题
生物技术专业研究生自荐信
2013/09/22 职场文书
校园环保标语
2014/06/13 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
Python pyecharts绘制条形图详解
2022/04/02 Python
Python 文字识别
2022/05/11 Python