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 相关文章推荐
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 Javascript
Javascript 作用域使用说明
Aug 13 Javascript
初学js 新节点的创建 删除 的步骤
Jul 04 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
May 23 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
js漂浮广告实现代码
Aug 15 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
关于json字符串与实体之间的严格验证代码
Nov 10 Javascript
微信小程序实现登录注册tab切换效果
Dec 29 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
js实现拖拽与碰撞检测
Sep 18 Javascript
JavaScript实现表单验证功能
Dec 09 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下MYSQL limit的优化
2008/01/10 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
javascript实现时钟动画
2020/12/03 Javascript
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python进程间通信用法实例
2015/06/04 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python实现猜数字游戏
2020/03/25 Python
python爬虫之遍历单个域名
2019/11/20 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
小学生纪律委员竞选稿
2015/11/19 职场文书
导游词之安徽九华山
2019/09/18 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python