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 相关文章推荐
超清晰的document对象详解
Feb 27 Javascript
javascript cookie解码函数(兼容ff)
Mar 17 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
Dec 19 Javascript
Windows8下搭建Node.js开发环境教程
Sep 03 Javascript
jquery向上向下取整适合分页查询
Sep 06 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
Mar 30 Javascript
Vue.js实现拖放效果的实例
Sep 30 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
微信小程序scroll-x失效的完美解决方法
Jul 18 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 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
PL-880隐藏功能
2021/03/01 无线电
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
JS实现自定义弹窗功能
2018/08/08 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
C#实现启动一个进程
2016/10/01 面试题
介绍一下Linux文件的记录形式
2013/09/29 面试题
思想政治自我鉴定
2013/10/06 职场文书
社会实践自我鉴定
2013/11/07 职场文书
总经理办公室主任岗位职责
2013/11/12 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
英雄儿女观后感
2015/06/09 职场文书
python基础入门之字典和集合
2021/06/13 Python
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
使用Django框架创建项目
2022/06/10 Python