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 相关文章推荐
通过隐藏option实现select的联动效果
Nov 10 Javascript
js本身的局限性 别让javascript做太多事
Mar 23 Javascript
在表单提交前进行验证的几种方式整理
Jul 31 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
Aug 21 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
Apr 03 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
Jun 05 Javascript
JS封装的自动创建表格的实现代码
Jun 15 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
深入理解javascript中的 “this”
Jan 17 Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 Javascript
JavaScript中字符串的常用操作方法及特殊字符
Mar 18 Javascript
文字溢出实现溢出的部分再放入一个新生成的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实现链式操作的三种方法详解
2017/11/16 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
面试常见的js算法题
2017/03/23 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
Python中logging实例讲解
2019/01/17 Python
python读写配置文件操作示例
2019/07/03 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python中有关时间日期格式转换问题
2019/12/25 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
职工运动会邀请函
2014/02/02 职场文书
幼儿园运动会口号
2014/06/07 职场文书
2014年实验室工作总结
2014/12/03 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
基于python实现银行管理系统
2021/04/20 Python
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Python Numpy库的超详细教程
2022/04/06 Python
Python实现双向链表基本操作
2022/05/25 Python
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript