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模仿淘宝的图片放大镜显示效果
Sep 15 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
Jan 29 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
jQuery开源组件BootstrapValidator使用详解
Jun 29 jQuery
解决webpack打包速度慢的解决办法汇总
Jul 06 Javascript
Vue中遍历数组的新方法实例详解
Jul 21 Javascript
Vue实现图片轮播组件思路及实例解析
May 11 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 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 a simple smtp class
2007/11/26 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
extern是什么意思
2016/03/10 面试题
五水共治一句话承诺
2014/05/30 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
采购内勤岗位职责
2015/04/13 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL
Java中的Kotlin 内部类原理
2022/06/16 Java/Android
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android