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 相关文章推荐
js资料prototype 属性
Mar 13 Javascript
该如何加载google-analytics(或其他第三方)的JS
May 13 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 Javascript
Javascript 闭包详解及实例代码
Nov 30 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
详解Angular.js中$http拦截器的介绍及使用
Jul 04 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
vue 过滤器filter实例详解
Mar 14 Javascript
vue 组件使用中的一些细节点
Apr 25 Javascript
webpack手动配置React开发环境的步骤
Jul 02 Javascript
微信小程序中的上拉、下拉菜单功能
Mar 13 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
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
学习python类方法与对象方法
2016/03/15 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python 基础教程之包和类的用法
2017/02/23 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Django框架安装方法图文详解
2019/11/04 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
物业招聘计划书
2014/01/10 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
督导岗位职责
2015/02/04 职场文书
大学副班长竞选稿
2015/11/21 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle