Jquery写一个鼠标拖动效果实现原理与代码


Posted in Javascript onDecember 24, 2012

近日项目中要做一个鼠标拖拽层的效果,于是手动使用Jquery做了一个,发出来跟大伙儿分享一下,并希望能得到高手的指点,如果哪位大侠觉得我的思路和代码不正确或者需要改进的话,希望能指点一二,在下感激不尽。

我的思路是这样的

1、在鼠标按下的时候,捕获鼠标的当前位置;

2、得到要移动对象的当前位置信息;

3、鼠标移动时,计算鼠标移动的距离,将这个距离更新到对象的位置,在我的代码中,我试用绝对定位来表示对象的位置;

4、当鼠标移出对象或者鼠标弹起的时候,则认为对象处于不能移动的状态。这个在我的代码中使用一个bool类型的变量isMouseDown表示,当这个变量为true的时候,则说明对象处于可移动状态,如果为false的时候,表示对象处于不可移动状态。鼠标移出对象或者弹出的时候,就将isMouseDown置为false。

好了,思路就是这样,下面将代码贴出来,如果我的思路中表达的不清楚的话,可以在代码中看出来:

<!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> 
<title>使用鼠标拖动层代码</title> 
<style type="text/css"> 
#Main 
{ 
width:400px; 
height:400px; 
position:absolute; 
top:10px; 
left:0; 
border:1px solid #CCC; 
border-radius:5px; 
background-color:Green; 
} 
h3 
{ 
margin:0; 
width:400px; 
height:40px; 
background-color:Gray; 
cursor:move; 
line-height:40px; 
border-radius:5px 5px 0 0; 
} 
</style> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script> 
<script type="text/javascript"> 
//注册一个Jquery的鼠标拖动函数,参数为要拖动的对象 
$.fn.extend({ SliderObject: function (objMoved) { 
var isMouseDown = false; //鼠标是否按下 
var mouseDownPosiX; 
var mouseDownPosiY; 
var InitPositionX; 
var InitPositionY; 
var obj = $(objMoved) == undefined ? $(this) : $(objMoved); 
obj.mousedown(function (e) { 
//当鼠标按下时捕获鼠标位置以及对象的当前位置 
mouseDownPosiX = e.pageX; 
mouseDownPosiY = e.pageY; 
isMouseDown = true; InitPositionX = obj.css("left").replace("px", ""); 
InitPositionY = obj.css("top").replace("px", ""); 
}).mousemove(function (e) { 
//当鼠标按下并且移动时,首先判断鼠标是否在当前焦点,以及鼠标是否已经弹起, 
if ($(this).is(":focus") && isMouseDown) { 
var tempX = parseInt(e.pageX) - parseInt(mouseDownPosiX) + parseInt(InitPositionX); 
var tempY = parseInt(e.pageY) - parseInt(mouseDownPosiY) + parseInt(InitPositionY); 
obj.css("left", tempX + "px").css("top", tempY + "px"); 
} 
//当鼠标弹起或者离开元素时,将鼠标弹起置为false,不移动对象 
}).mouseup(function () { 
isMouseDown = false; 
}).mouseleave(function () { 
isMouseDown = false; 
}); 
} 
}); 
$(document).ready(function () { 
$("#Slider").SliderObject($("#Main")); 
}) 
</script> 
</head> 
<body> 
<div id="Main"> 
<h3>鼠标放在这里拖动我</h3> 
<div id="Container">可以使用鼠标拖动的层</div> 
</div> 
</body> 
</html>
Javascript 相关文章推荐
基于jQuery的日期选择控件
Oct 27 Javascript
jquery-easyui关闭tab自动切换到前一个tab
Jul 29 Javascript
Js放到HTML文件中的哪个位置有什么区别
Aug 21 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 Javascript
总结jQuery插件开发中的一些要点
May 16 Javascript
怎么引入(调用)一个JS文件
May 26 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
Sep 19 Javascript
javascript自定义右键菜单插件
Dec 16 Javascript
javascript实现倒计时效果
Feb 17 Javascript
VueJS实现用户管理系统
May 29 Javascript
javascript实现前端成语点击验证
Jun 24 Javascript
jquery限制输入字数,并提示剩余字数实现代码
Dec 24 #Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
Dec 23 #Javascript
ajax中get和post的说明及使用与区别
Dec 23 #Javascript
javascript 全选与全取消功能的实现代码
Dec 23 #Javascript
javascript利用控件对windows的操作实现原理与应用
Dec 23 #Javascript
javascript小数四舍五入多种方法实现
Dec 23 #Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 #Javascript
You might like
15个小时----从修改程序到自己些程序
2006/10/09 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实现计算最小编辑距离
2016/03/17 Python
深入浅出学习python装饰器
2017/09/29 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
理工大学毕业生自荐信
2013/11/01 职场文书
活动策划邀请函
2014/02/06 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
教师自我反思材料
2014/02/14 职场文书
道德演讲稿
2014/05/21 职场文书
销售工作决心书
2015/02/04 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
教师考核鉴定意见
2015/06/05 职场文书