Web的鼠标拖动效果

以前写过一个拖动效果的Demo,拖拽元素新位置的计算是放在拖拽元素的mousemove事件中进行的。计算效率差,而且效果不好。所以一直有想怎样才能做出jquery-ui那种顺滑的拖拽效果。

其实顺滑的拖拽效果的突破口有两点:

  1. 事件捕捉要去捕捉document的鼠标位置。
  2. 使用setInterval功能计算拖拽元素的新位置。

使用jQuery,经过一些简单的重构和调试,将代码完善如下:

drag.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link type="text/css" rel="stylesheet" href="drag.css">
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="drag.js"></script>
</head>
<body>
    <div class="drag-panel">
        <div class="title">Drag Panel</div>
    </div>
</body>
</html>

drag-panel.css ,做一些简单的修饰:

.drag-panel{
    position: absolute;
    width:300px;
    height:100px;
    border:1px solid black;
    cursor:default
}

.drag-panel .title{
    text-align:center;
    background-color:yellowgreen;
}

drag.js ,效果非常好:

$(function(){

    var m_x0,m_y0,  // 鼠标坐标0
        m_x1,m_y1,  // 鼠标坐标1
        timeHandler  //定时器句柄
    var $dragPanel = $(".drag-panel");
    var $dragTitle = $(".drag-panel .title");

    // 鼠标点击,触发拖拽过程。
    $dragTitle.mousedown(function(e){
        // 确定上一次调用的定时器是被清空了。
        if(timeHandler!=0){
            window.clearInterval(timeHandler);
        }

        // 确定鼠标的初始位置。初始状态下,鼠标位置1与鼠标位置0必须相同。
        m_x0 = m_x1 = e.clientX;
        m_y0 = m_y1 = e.clientY;

        // 鼠标移到需要扑捉document的鼠标位置。
        // mouseup表示鼠标拖拽动作结束。该动作清空拖拽动期间的计算,且mouseup也只执行一次。
        $(document).mousemove(mousemoveFunc).one("mouseup",mouseupFunc);
        // 定时计算拖拽元素位置。
        timeHandler = window.setInterval(dragPos,30);
    });

    // 鼠标移动,获取鼠标的全局坐标。
    function mousemoveFunc(e){
        window.console.log(new Date().getTime());
        m_x1 = e.clientX;
        m_y1 = e.clientY;
    }

    // 鼠标拖拽动作结束,清空的拖拽期间的计算。
    function mouseupFunc(e){
        if(timeHandler>0){
            window.clearInterval(timeHandler);
            timeHandler = 0;
            $(document).unbind("mousemove",mousemoveFunc);
        }
    }

    // 拖拽计算。
    function dragPos(){
        var dm_x = m_x1 - m_x0;
        var dm_y = m_y1 - m_y0;

        var p0 = $dragPanel.offset();
        $dragPanel.css("top",p0.top+dm_y+"px");
        $dragPanel.css("left",p0.left+dm_x+"px");

        m_x0 = m_x1;
        m_y0 = m_y1;
    } 

})

效果如下:

Drag Panel

时间: 2024-07-31 14:34:42

Web的鼠标拖动效果的相关文章

简单的鼠标拖动效果

使用js实现简单的鼠标拖动效果,但此部分代码有个小小的BUG,后期改进好我会写进来,但基本的效果已经实现,请大家参考. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠标移动</title> <style> #box{ width: 50px; height: 50px; position:

鼠标在网页上的拖动效果

使用JavaScript写的鼠标拖动效果 近日项目中要做一个鼠标拖拽层的效果,于是手动使用Jquery做了一个,发出来跟大伙儿分享一下,并希望能得到高手的指点,如果哪位大侠觉得我的思路和代码不正确或者需要改进的话,希望能指点一二,在下感激不尽. 效果展示 下面是我的源代码 <html> <head> <style> div{ width:200px; height:200px; background-color:red; position:absolute; } <

Javascript 简单实现鼠标拖动DIV

http://zhangbo-peipei-163-com.iteye.com/blog/1740078 比较精简的Javascript拖动效果函数代码 http://www.jb51.net/article/10578.htm <html> <head><title>拖动效果函数演示 by Longbill.cn</title> <style> body { font-size:12px; color:#333333; border : 0px

鼠标拖动虚影效果(拖动的时候使用图片蒙人,但效果不错)

疯狂delphi delphiXE7.XE8.XE10公开课A 群号:58592705 鼠标拖动虚影效果 1 //1.定义消息 2 procedure MYHideMessage(var Msg: tagMSG; var Handled: Boolean); 3 4 //2.执行消息 5 procedure TForm2.MYHideMessage(var Msg: tagMSG; var Handled: Boolean); 6 var 7 pt:TPoint; 8 bit: TBitmap;

图片3d轮放查看效果(V2.0):使用鼠标拖动实现图片的轮放

上面的版本号为通过左右button实现图片轮放,这个版本号.是通过在窗体拖动鼠标.左右滑动图片. 关键点在于选择一个合适的值.使鼠标拖动时.全部图片均可显示,可是不会滑动过快或离开窗体. 不多说,直接贡献源代码. <style> img { position: absolute; top:200; left:400px; /* border: 1px solid #333;*/ padding: 2px 5px 2px 5px; -webkit-transition:ease all 0.7s

使用jquery实现简单的拖动效果,分享源码

因为想实现相框的拖到,找了半天的原因愣是没有找到错误,所以,只能翻看源码了 如何实现拖动效果? 浏览DEMO 首先分析下拖动效果原理: 1.当鼠标在被拖动对象上按下鼠标(触发onmousedown事件,且鼠标在对象上方) 2.开始移动鼠标(触发onmousemove事件) 3.移动时更显对象的top和left值 4.鼠标放开停止拖动(触发onmouseup事件) 注意:拖动的对象必须是定位对象(即设置了position:absolute或 relative). 也就是说拖动事件=onmoused

js实现的div拖动效果实例代码

js实现的div拖动效果实例代码:div的拖动效果在很多效果中都有应用,当然还有很多附加的功能,本章节只是给拖动效果,并介绍一下它的实现过程.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <t

js鼠标控制图片的特效,滚轮控制放大、缩小、鼠标拖动、聚焦。。。

项目需要做一个js控制图片的特效,滚轮控制放大.缩小.鼠标拖动等效果,网上找方法,各种报错.不兼容...最终自己研究出一套方案如下: 代码直接从项目中拷了,就不整理格式了 <script type="text/javascript"> //图片特效 by jifei_mei //图片大小,记录放大或缩小图片前的大小 var pic_size = { width:0, height:0 }; //绑定滚轮滚动事件 if (window.addEventListener) {

运用HTML5原生拖动事件(drag)实现拖动效果

拖动效果相信很多朋友都自己写过,不管你用原生JS还是Jquery要实现起来也很简单,但是今天我想介绍的是运用HTML5标准中定义的原生拖动事件实现拖动效果. 一.背景: 其实说是HTML5标准定义,其实最早在IE4中就有拖放功能的API,只是在IE4中,网页中只有两种对象可以拖放:图像和某些文本.并且在IE4中唯一有效的放置目标是文本框.到了IE5.5,拖放功能得到了扩展,让网页中的任何元素都可以拖放.最终HTML5以IE的实力为基础制定了拖放规范.FF3.5+,Safari3+和Chrome根