draggable用来在界面上创建一个可以拖动的元素,既然是可以拖动的元素,那么它在拖动过程中会有下面的几个事件:onBeforeDrag、onStartDrag、onDrag、onStopDrag。

  创建一个拖动元素一般需要两个部分:一个包装层,用来保存在拖动过程的内容;另外一个,是拖动的对象,相当于是水桶把。下面的示例中,拖动#title来改变#db的位置。

<body>
    <div id="db" style="width: 100px;">
        <p id="title" style="background: #ccc;">
            draggable</p>
        <p id="P1">
            1111111111</p>
        <p id="P2">
            2222222222</p>
        <p id="P3">
            3333333333</p>
    </div>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#db').draggable({
                handle: '#title'
            });
        });
    </script>
</body>

  另外,也可以不指定handle属性,那么整个#db都是拖动的。

基本属性

1.handle

  拖动元素中,用于拖动的部分。

2.axis

  控制拖动方向,如果不指定,那么可以任意拖动。通过, 'v' 或 'h',这两个值,来指定水平或垂直方向上的拖动。

3.cursor

  用来指定拖动时,光标的样式,默认是:move

4.revert

  如果这个属性值是ture,那么拖动松开后,拖动元素会回到起点。

5.proxy

  通过赋值“clone”,拖动时,会创建一个副本。

拖拽限制

<body>
    <div style="position: relative; overflow: hidden; border: 1px solid #ccc; width: 500px; height: 300px">
        <div id="db" style="width: 100px; height: 100px; background: #fafafa; border: 1px solid #ccc;">
        </div>
    </div>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#db').draggable({
                onDrag: function (e) {
                    var d = e.data;
                    if (d.left < 0) {
                        d.left = 0;
                    }
                    if (d.top < 0) {
                        d.top = 0;
                    }
                    if (d.left + $(d.target).outerWidth() > $(d.parent).width()) {
                        d.left = $(d.parent).width() - $(d.target).outerWidth();
                    }
                    if (d.top + $(d.target).outerHeight() > $(d.parent).height()) {
                        d.top = $(d.parent).height() - $(d.target).outerHeight();
                    }
                }
            });
        });
    </script>
</body>

通过在拖拽事件中获取db和外部层,然后限制top和left。下面在调试中,输出e.data的值。

学校课程表

  

下面代码运行有个bug,有时拖动结束了,这个元素失去了再次拖动的能力。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>EasyUI</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8;" />
    <link href="easyui/themes/default/easyui.css" rel="stylesheet" type="text/css" />
    <link href="easyui/themes/icon.css" rel="stylesheet" type="text/css" />
    <script src="easyui/jquery-1.8.0.min.js" type="text/javascript"></script>
    <script src="easyui/jquery.easyui.min.js" type="text/javascript"></script>
    <script src="easyui/locale/easyui-lang-zh_CN.js" type="text/javascript"></script>

    <style type="text/css">
        .left{width: 120px;float: left;}
        .left table{background: #E0ECFF;}
        .left td{background: #eee;}

        .right{float: right;width: 570px;}
        .right table{width: 100%;}
        .right td{background: #E0ECFF;color: #444;text-align: center;padding: 2px;width: 100px;}
        .right td.drop{background: #fafafa;width: 100px;}
        .right td.over{background: #FBEC88;width: 100px;}

        .item{text-align: center;border: 1px solid #499B33;background: #fafafa;color: #444;width: 100px;}
        .assigned{border: 1px solid #BC2A4D;}
    </style>
</head>
<body>
    <div style="width: 800px;">
        <div class="left">
            <table>
                <tr>
                    <td>
                        <div class="item">英语</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class="item">科学</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class="item">音乐</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class="item">历史</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class="item">计算机</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class="item">数学</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class="item">艺术</div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div class="item">伦理学</div>
                    </td>
                </tr>
            </table>
        </div>
        <div class="right">
            <table>
                <tr>
                    <td></td>
                    <td>星期一</td>
                    <td>星期二</td>
                    <td>星期三</td>
                    <td>星期四</td>
                    <td>星期五</td>
                </tr>
                <tr>
                    <td>08:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
                <tr>
                    <td>09:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
                <tr>
                    <td>10:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
                <tr>
                    <td>11:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
                <tr>
                    <td>12:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
                <tr>
                    <td>13:00
                    </td>
                    <td colspan="5">午餐时间
                    </td>
                </tr>
                <tr>
                    <td>14:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
                <tr>
                    <td>15:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
                <tr>
                    <td>16:00</td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                    <td class="drop"></td>
                </tr>
            </table>
        </div>
    </div>

    <script type="text/javascript">
        $(function () {
            $('.left .item').draggable({
                revert: true,
                proxy: 'clone'
            });
            //可拽入容器
            $('.right td.drop').droppable({
                onDragEnter: function () {
                    $(this).addClass('over');
                },
                onDragLeave: function () {
                    $(this).removeClass('over');
                },
                onDrop: function (e, source) {
                    $(this).removeClass('over');
                    if ($(source).hasClass('assigned')) {
                        //如果有红色的边框,表示是已经在课表中的课程
                        $(this).empty().append(source);
                    } else {
                        //没有红色边框,是从左侧源中拖出的,要创建一个副本
                        var c = $(source).clone().addClass('assigned');
                        $(this).empty().append(c);
                        //这个副本也是可以拖动的
                        c.draggable({
                            revert: true,
                            onStopDrag: function (e) {
                                //停止拖动的时候,如果在表格之外,则删除这个对象
                                var d = e.data;
                                var thisF = d.left;
                                var thisT = d.top;
                                var tableF = $(".right table").offset().left;
                                var tableW = $(".right table").width();
                                var tableT = $(".right table").offset().top;
                                var tableH = $(".right table").height();

                                if (thisF < tableF || thisF > tableF + tableW || thisT < tableT || thisT > tableT + tableH) {
                                    $(this).remove();
                                }
                            }
                        });
                    }
                }
            });
        });
    </script>
</body>
</html>

EasyUI-draggable的更多相关文章

  1. easyUI draggable组件使用

    easyUI draggable组件使用: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  2. easyUI draggable插件使用不当,导致拖动div内部文本框无法输入;设置echarts数据为空时就显示空白,不要动画和文字

    先上一个Demo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://ww ...

  3. EasyUI ---- draggable可拖动的用法

    <link href="~/Scripts/easyui1.5/themes/default/easyui.css" rel="stylesheet" / ...

  4. EasyUI - Draggable 拖动控件

    效果: html代码: <div id="box" style="width: 400px; height: 200px; background-color: #f ...

  5. EasyUI ---- draggable购物车

    @{ ViewBag.Title = "Easyui_draggable"; Layout = "~/Views/Shared/Layouts.cshtml"; ...

  6. EasyUI Draggable 可拖动

    通过 $.fn.draggable.defaults 重写默认的 defaults. 用法 通过标记创建可拖动(draggable)元素. <div id="dd" clas ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局

    系列目录 前言:这一节比较有趣.基本纯UI,但是不是很复杂 有了实现表单的打印和更加符合流程表单方式,我们必须自定义布局来适合业务场景打印!我们想要什么效果?看下图 (我们没有布局之前的表单和设置布局 ...

  8. JQuery easyui (1) Draggable(拖动)组件

    很不习惯这种强迫式的学习,但谁叫我不是老师了,所以还是决定坚持练习,顺带为博客加点东西.虽然我还是很反感短时间内惯性的去熟悉一个工具. easyui做为一个封装了JQusey的UI插件,其实还是蛮好用 ...

  9. EasyUI基础知识Draggable(拖累)

    学习前easyui基于解析器,装载机.对他们来说,入门阶段,我们只需要在一个简单的理解.第一阶段,不宜过深后,.接着,根据easyui订购的文件正在研究安排官方网站Draggable插入. Dragg ...

  10. jQuery EasyUI API - Base - Draggable [原创汉化官方API]

    最近在学习jQuery EasyUI,发现中文的文档好少,部分文档不错但它是鸟语的,为了大家也为了自己学习吧,汉化做一下笔记. 有没有说清楚的,或者翻译不正确的地方还请大家谅解指出.. 由于工作时间原 ...

随机推荐

  1. hdu5442(2015长春赛区网络赛1006)后缀数组+KMP /最小表示法?

    题意:给定一个由小写字母组成的长度为 n 的字符串,首尾相连,可以从任意一个字符开始,顺时针或逆时针取这个串(长度为 n),求一个字典序最大的字符串的开始字符位置和顺时针或逆时针.如果有多个字典序最大 ...

  2. LESS中文版函数手册

    LESS是一种由Alexis Sellier设计的动态层叠样式表语言.LESS 做为 CSS 的一种形式的扩展,它并没有减少 CSS 的功能,而是在现有的 CSS 语法之上,添加了许多其它的功能. 在 ...

  3. 磁盘检验[转自vbird]

    磁盘检验 由于系统在运行时谁也说不准啥时硬件或者是电源会有问题,所以『死机』可能是难免的情况(不管是硬件还是软件). 现在我们知道文件系统运行时会有硬盘与内存数据异步的状况发生,因此莫名其妙的死机非常 ...

  4. 9款精致HTML5/jQuery日历时钟控件源码下载(源码请见百度云) 链接:http://pan.baidu.com/s/1geIXe75 密码:7m4a

    现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...

  5. linux操作文本文件

    打开文件 #vi 文件名 保存退出 从编辑模式退到命令行模式,按esc键 保存退出命令 #:wq 强制退出,不保存 #:q!

  6. C#绘图双缓冲

    C#绘图双缓冲 C#双缓冲解释: 简单说就是当我们在进行画图操作时,系统并不是直接把内容呈现到屏幕上,而是先在内存中保存,然后一次性把结果输出来,如果没用双缓冲的话,你会发现在画图过程中屏幕会闪的很厉 ...

  7. HTML5 拖放(Drag 和 Drop)

    拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. <!DOCTYPE HTML> <html> <hea ...

  8. ViewPager动态加载、删除页面

    很多人在网上说ViewPager的PagerAdapter.notifyDataSetChanged()无效.刚开始我也这样认为,甚至被误导以为是真理.   后来,找了一下,在PagerAdatpar ...

  9. Unity3d 根据重力自动翻转

    玩游戏时,经常有这样的体验.我正常是左横屏,手机翻转过来为右横屏,游戏界面也随着翻转为右横屏. Unity3D引擎,不需要写任何代码,只需要 Player Setting 设置即可: 如图所示:

  10. InnoDB Double write

    记得刚开始看InnoDB文档的时候,Double Write一节(其实只有一小段)就让我很困惑.无奈当时内力太浅,纠缠了很久也没弄明白.时隔几个月,重新来整理一下. 涉及到的概念:Buffer Poo ...