Jquery写一个鼠标拖动效果实现原理与代码

 更新时间:2012年12月24日 09:35:48   作者:  
近日项目中要做一个鼠标拖拽层的效果,于是手动使用Jquery做了一个,发出来跟大伙儿分享一下,并希望能得到高手的指点,如何有高手改进的话,在下不胜感激
近日项目中要做一个鼠标拖拽层的效果,于是手动使用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>

相关文章

  • jquery查找tr td 示例模拟

    jquery查找tr td 示例模拟

    jquery怎么查找tr td,下面模拟了一个table出来,给大家参考
    2014-05-05
  • jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】

    jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】

    这篇文章主要介绍了jQuery插件HighCharts绘制2D圆环图效果,结合实例形式分析了jQuery使用HighCharts插件绘制圆环图的实现步骤与相关操作技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
    2017-03-03
  • jquery中ajax跨域方法实例分析

    jquery中ajax跨域方法实例分析

    这篇文章主要介绍了jquery中ajax跨域方法,结合实例分析了jQuery中使用getJSON及$.ajax实现ajax跨域的技巧,需要的朋友可以参考下
    2015-12-12
  • jquery实现滑动特效代码

    jquery实现滑动特效代码

    这篇文章主要介绍了jquery实现滑动特效代码, .slideUp([duration][,complete])目标元素向上滑入隐藏;.slideDown([duration][,complete])目标元素向下滑出显示;.slideToggle([duration][,complete])目标元素隐藏则向下滑出显示,否则向上滑入隐藏;需要的朋友参考下
    2015-08-08
  • jquery实现焦点轮播效果

    jquery实现焦点轮播效果

    本文主要介绍了jquery实现焦点轮播效果的示例代码,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • cookie.js 加载顺序问题怎么才有效

    cookie.js 加载顺序问题怎么才有效

    在使用cookie.js时,只有在jquery.js文件后加载整体才有效,下面与大家分享下有效加载顺序,有此需求的朋友可以参考下
    2013-07-07
  • jQuery弹出层插件简化版代码

    jQuery弹出层插件简化版代码

    这个简化版不能在别的框架弹出层的,所以也就没有了那个cssurl属性了,也没有target 属性了
    2008-10-10
  • jquery+h5实现九宫格抽奖特效(前后端代码)

    jquery+h5实现九宫格抽奖特效(前后端代码)

    这篇文章主要为大家详细介绍了jquery+h5实现九宫格抽奖特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • jquery trigger伪造a标签的click事件取代window.open方法

    jquery trigger伪造a标签的click事件取代window.open方法

    这篇文章主要介绍了使用jquery trigger 触发a标签的click事件取代window.open方法,需要的朋友可以参考下
    2014-06-06
  • jQuery validate 验证radio实例

    jQuery validate 验证radio实例

    这篇文章主要介绍了jQuery validate 验证radio实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03

最新评论