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 相关文章推荐
BOM与DOM的区别分析
Oct 26 Javascript
可选择和输入的下拉列表框示例
Nov 05 Javascript
js控制表单不能输入空格的小例子
Nov 20 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 Javascript
canvas实现粒子时钟效果
Feb 06 Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
Nov 14 Javascript
使用vue的transition完成滑动过渡的示例代码
Jun 25 Javascript
js与jquery获取input输入框中的值实例讲解
Feb 27 jQuery
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 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
初识Laravel
2014/10/30 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
Python MD5加密实例详解
2017/08/02 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
一道输出判断型Java面试题
2014/10/01 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
单位成立周年感言
2014/01/26 职场文书
大学秋游活动方案
2014/02/11 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
委托书格式要求
2015/01/28 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
ICOM R71E和R72E图文对比解说
2022/04/07 无线电