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实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
学习javascript,实现插入排序实现代码
Jul 31 Javascript
Jquery中删除元素的实现代码
Dec 29 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
Apr 21 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
JavaScript中使用import 和require打包后实现原理分析
Mar 07 Javascript
vue.js响应式原理解析与实现
Jun 22 Javascript
vue iview多张图片大图预览、缩放翻转
Jul 13 Javascript
深入理解 TypeScript Reflect Metadata
Dec 12 Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 Javascript
Array.filter中如何正确使用Async
Nov 04 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
各种快递查询--Api接口
2016/04/26 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
基于python二叉树的构造和打印例子
2019/08/09 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
python如何对链表操作
2020/10/10 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
导游实习生自荐书
2014/01/28 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
电气工程自动化求职信
2014/03/14 职场文书
校园安全演讲稿
2014/05/09 职场文书
端午节演讲稿
2014/05/23 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
教师求职信怎么写
2015/03/20 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
bose降噪耳机音能消除人声吗
2022/04/19 数码科技