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 相关文章推荐
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
Mar 23 Javascript
浅析JavaScript中的delete运算符
Nov 30 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
js数组去重的方法汇总
Jul 29 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
webpack学习教程之前端性能优化总结
Dec 05 Javascript
使用 vue-i18n 切换中英文效果
May 23 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
vue.js中导出Excel表格的案例分析
Jun 11 Javascript
bootstrap Table实现合并相同行
Jul 19 Javascript
谈谈node.js中的模块系统
Sep 01 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 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
Javascript Math对象
2009/08/13 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
Python类装饰器实现方法详解
2018/12/21 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
postman和python mock测试过程图解
2020/02/22 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
存储过程的优缺点是什么
2015/01/10 面试题
营销与策划应届生求职信
2013/11/04 职场文书
小学班主任评语大全
2014/04/23 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
入党团支部推荐意见
2015/06/02 职场文书
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python