转自:http://www.muzilei.com/archives/136

如何实现拖动效果?

浏览DEMO

首先分析下拖动效果原理:

1.当鼠标在被拖动对象上按下鼠标(触发onmousedown事件,且鼠标在对象上方)

2.开始移动鼠标(触发onmousemove事件)

3.移动时更显对象的top和left值

4.鼠标放开停止拖动(触发onmouseup事件)

注意:拖动的对象必须是定位对象(即设置了position:absolute或 relative)。

也就是说拖动事件=onmousedown事件+onmousemove事件

整个过程就是处理这三个事件来模拟drag事件

现在看看我实现的源代码:

html代码:

1 <div class="drag">
2   <p class="title">标题(点击标题拖动)</p>
3 </div>
4  
5 <div class="drag1">
6   <p class="title">标题</p>
7   点击我移动
8 </div>

jquery插件代码:

1 (function($){
2     $.fn.drag=function(options){
3  
4     //默认配置
5     var defaults = {
6         handler:false,
7         opacity:0.5
8         };
9  
10        // 覆盖默认配置
11     var opts = $.extend(defaults, options);
12  
13     this.each(function(){
14  
15     //初始标记变量
16     var isMove=false,
17     //handler如果没有设置任何值,则默认为移动对象本身,否则为所设置的handler值
18     handler=opts.handler?$(this).find(opts.handler):$(this),
19     _this=$(this), //移动的对象
20     dx,dy;
21  
22     $(document)
23     //移动鼠标,改变对象位置
24     .mousemove(function(event){
25     // console.log(isMove);
26     if(isMove){
27  
28     //获得鼠标移动后位置
29     var eX=event.pageX,eY=event.pageY;
30  
31     //更新对象坐标
32     _this.css({'left':eX-dx,'top':eY-dy});
33  
34             }
35         })
36  
37     //当放开鼠标,停止拖动
38     .mouseup(function(){
39         isMove=false;
40         _this.fadeTo('fast', 1);
41         //console.log(isMove);
42             });
43  
44     handler
45     //当按下鼠标,设置标记变量isMouseDown为true
46     .mousedown(function(event){
47  
48     //判断最后触发事件的对象是否是handler
49     if($(event.target).is(handler)){
50  
51         isMove=true;
52         $(this).css('cursor','move');
53  
54         //console.log(isMove);
55         _this.fadeTo('fast', opts.opacity);
56  
57         //鼠标相对于移动对象的坐标
58         dx=event.pageX-parseInt(_this.css("left"));
59         dy=event.pageY-parseInt(_this.css("top"));
60  
61             }
62                 });
63         });
64     };
65  })(jQuery);

调用方法:

1 $(function(){
2  
3 //拖动标题
4 $(".drag").drag({
5     handler:$('.title'),//操作拖动的对象,此对象必须是移动对象的子元素
6     opacity:0.7 //设置拖动时透明度
7     });
8  
9 //拖动主体对象
10 $(".drag1").drag({
11      opacity:0.7
12      });
13  
14 });

浏览DEMO

使用jQuery实现简单的拖动效果的更多相关文章

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

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkEAAAERCAIAAADzAOSQAAALRklEQVR4nO3dW5LaaAKEUfa/NkfMGu

  2. jquery 最简单的动画效果

    <p style="border: 1px solid red"> 我会慢慢变大 </p> <a>dianji</a> <sc ...

  3. jquery简单的拖动效果

    <!DOCTYPE html> <html> <meta http-equiv="Content-Type" content="text/h ...

  4. jquery 超简单的点赞效果

    1.HTML(可以优化一下,尽量少些几个标签.....) <div id="dianz"> <b class="cz"><em&g ...

  5. js:简单的拖动效果

    效果演示:https://jsfiddle.net/dwqs/b5ywws9f/embedded/result/ html: <div class="wrap"> &l ...

  6. jquery div拖动效果示例代码

    div拖动效果想必大家都有见到过吧,实现的方法也是有很多的,下面为大家将介绍使用jquery是如何实现的,感兴趣的朋友不要错过 复制代码代码如下: <%@ page language=" ...

  7. JQuery(二)——简单动画效果

    上一篇博客总结了JQuery的一些基本知识,这篇博客重点从JQuery能够制造各种各样的网页效果方面来进行总结.总结一些常见的常用的基本效果的必备方法.从隐藏显示,淡入淡出,滑动,动画等几个方面来简单 ...

  8. Jquery简单的placeholder效果

    Jquery简单的placeholder效果 由于IE6-IE9不支持HTML5中的placeholder,所以自己依赖于Jquery简单的写了一个,供参考! 先看看效果吧!如下JSFiddle地址 ...

  9. 一行代码轻松实现拖动效果[JQuery]

    写JS实现拖动需要一大堆不便维护的代码,实属麻烦,Google了大半天,发现了一个优秀的Jquery插件EasyDrag,只需要一行代码便可轻松在主流浏览器上 实现拖动效果.   $(document ...

随机推荐

  1. 基于C#的IBM消息队列操作客户端

    背景: 做XX项目需要把交易的消息推送给YY系统,技术选型MQ 另:选用MQ原因是为了防止YY系统宕机,无法接受收消息 实现 1.安装IBM WebSphere MQ客户端 2.引用amqmdnet. ...

  2. window redis 安装配置

    1 下载 https://github.com/MSOpenTech/redis/releases 当前最新版本为 redis-2.8.21   下载的为zip包,下载连接为:https://gith ...

  3. java新手笔记16 面积

    1.图形类 package com.yfs.javase; public class Shape { //计算面积方法 public double getArea() { System.out.pri ...

  4. Hdu 1452 Happy 2004(除数和函数,快速幂乘(模),乘法逆元)

    Problem Description Considera positive integer X,and let S be the sum of all positive integer diviso ...

  5. isset(), empty()

    isset()测试$a = '';isset($a); // true $a = FALSE;var_dump(isset($a)); // true $a = NULL;var_dump(isset ...

  6. php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event

    php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event

  7. 犯这个错误的肯定不止我一个 关于File

    File.Create(string filePath)这种用法所有人都知道,这两天用到的时候却发现一个问题. 需要先判断文件是否存在,如果不存在则创建文件,然后向该文件写入数据,后续定时Append ...

  8. ubuntu中vi在编辑状态下方向键不能用的解决

    ubuntu中vi在编辑状态下方向键不能用,还有回格键不能删除等,我们平时习惯的一些键都不能使用. 解决办法: 可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令. 安装 ...

  9. IT新人养成与蘑菇理论

    (一)来源及定义    “蘑菇定律”最早是在上世纪70年代一批年轻的电脑程序员编写的.当时,美国一批电脑程序员意外发现,一批刚从学校毕业的新人参加了工作,这些人很难适应工作环境.在这种情况下,这些电脑 ...

  10. Nth Digit | leetcode

    Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Note: n i ...