转自: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. window环境下 node.js 游戏框架pomelo 安装与启动

    一.软件准备 1.1 下载node.js 1.2 下载python 2.5 < version <3.0 1.3 下载c++编译器(一般控制面板中-->程序和功能上已有,如果没有需要 ...

  2. sublimeText3中 less2css error: `lessc` is not available的解决办法

    昨天在sublimeText3中安装了less 以及 less2css插件,但是在编译保存的时候总是出现错误: less2css error: `lessc` is not available 就go ...

  3. iOS 项目中将 http 改成 https 后需要改动的地方(密钥验证)

    这种是不验证证书的密钥 AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone] ...

  4. centOS 6.4 vsftpd 500 illegal port command

    原先配置好的vsftpd突然不行了,不知为啥,感觉跟网络有关,这个网络总是有dns拦截的现象,..小公司.真烦人,用联通线路就没问题, 但同事就是连不上,我的笔记本却可以连接上..我的ubuntn,同 ...

  5. git 彩色显示当前branch

    环境: fedora 20 $ curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt. ...

  6. 简易的RestClient代码

    package tests; import java.io.*; import org.apache.http.HttpEntity; import org.apache.http.HttpRespo ...

  7. PHPExcel1

    下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...

  8. 基于u-boot源码的简单shell软件实现

    一.概述 1.shell概念 Shell(命令解析器),它用于接收用户输入的命令,进行解析,然后调用相应的应用程序,为使用者提供了使用软件的界面. shell是操作系统最外面的一层.shell管理你与 ...

  9. 单片微机原理P0:80C51结构原理

    本来我真的不想让51的东西出现在我的博客上的,因为51这种东西真的太low了,学了最多就所谓的垃圾科创利用一下,但是想一下这门课我也要考试,还是写一点东西顺便放博客上吧. 这一系列主要参考<单片 ...

  10. iOS - 发送邮件

    IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. ...