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 相关文章推荐
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
Jun 05 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
javascript中indexOf技术详解
May 07 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
JavaScript获取页面中超链接数量的方法
Nov 09 Javascript
js解决movebox移动问题
Mar 29 Javascript
js canvas实现QQ拨打电话特效
May 10 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
vue增加强缓存和版本号的实现方法
May 01 Javascript
JS可断点续传文件上传实现代码解析
Jul 30 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 03 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
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
python遍历数组的方法小结
2015/04/30 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
Python模块搜索路径代码详解
2018/01/29 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
Python更换pip源方法过程解析
2020/05/19 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
物业管理专业自荐信
2014/07/01 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
四年级作文之植物
2019/09/20 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
python中数组和列表的简单实例
2022/03/25 Python
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL