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 监听textarea中按键事件
Oct 08 Javascript
jQuery 遍历json数组的实现代码
Sep 22 Javascript
JQuery实现的图文自动轮播效果插件
Jun 19 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
JSON对象 详解及实例代码
Oct 18 Javascript
Vue.js常用指令汇总(v-if、v-for等)
Nov 03 Javascript
基于jQuery实现照片墙自动播放特效
Jan 12 Javascript
react-navigation之动态修改title的内容
Sep 26 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 Javascript
js prototype深入理解及应用实例分析
Nov 25 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 Javascript
vue实现移动端返回顶部
Oct 12 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和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
python处理html转义字符的方法详解
2016/07/01 Python
Apache如何部署django项目
2017/05/21 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
浅谈Python3中print函数的换行
2020/08/05 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
银行职员个人的工作自我评价
2014/02/15 职场文书
课例研修方案
2014/05/31 职场文书
检察院起诉意见书
2015/05/20 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
Python 实现Mac 屏幕截图详解
2021/10/05 Python