• jquery UI draggable 带复制拖拽


     // 做学习参考的话,重点看3就可以了, 前面的1跟2 都有些问题, 这是很早之前写的了,由于时间原因顾不上细细修改了,

    // 具体 就是修改  $('.ui-draggable-dragging').html() 结构, 使得拖动过程中的样式美观,

    //('.this_a') 是要去拖目标对象的身份识别ID,('.this_b') 是对应得具体内容, 后面在去重判断时会用到。
    // 详细的  可以去参考 官网或  菜鸟教程  http://www.runoob.com/jqueryui/example-draggable.html     本文这个有时间的话,我会在整理整理。谢谢!!!

    1.带去重复带复制拖拽

    <!DOCTYPE html>
    <html>
    <head lang="en">
    <script type="text/javascript" language="javascript" src="js/trirand/jquery-1.11.1.min.js"></script>
    <script type="text/ecmascript" src="js/trirand/jquery-ui.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="css/trirand/jquery-ui.css" />
    
    <style>
    
    .goal_item{
        float: left;
        margin-right: -1px;
        border:solid 1px #D9E1EB;
        height: 210px;
    }
    .goal_item dt{
        border-bottom:solid 1px #D9E1EB;
        font: normal 14px/34px "Microsoft YaHei","微软雅黑";
        text-align: center;
        padding: 0 14px;
        background-color: #E7F1FF;
    }
    
    
    .goal_item dd{
        height: 176px;
        width: 124px;
        text-align: center;
        overflow-x: hidden;
        overflow-y:auto;
    }
    .goal_item ul{
        height: 100%;
        float: left;
        width: 100%;
        padding-top: 15px;
    
    }
    
    .goal_item li{
        padding-bottom: 15px;
    }
    .ERP_moving  a{
        display: inline-block;
        text-align: center;
        width: 96px;
        height: 26px;
        line-height: 26px;
        color: #FFFFFF;
        -webkit-border-radius: 3px;
        -moz-border-radius: 3px;
        border-radius: 3px;
        background-color: #B8CBED;
        margin: 0 14px 0 8px;
    }
    .ERP_moving  a:hover{
        background-color: #4895FF;
    }
    
    </style>
    </head>
    <body>
    <dl class="goal_item">
        <dt>采购计划单</dt>
        <dd>
            <ul class="goal_item_ul">
                <li class="ERP_moving"><a href="javascript:void(0)">测试保留</a></li>
            </ul>
        </dd>
    </dl>
    
    <!-- 此处用的jqGrid 具体的不写了-->
    
    
    
    
    <table id="jqGrid"></table>
    <div id="jqGridPager"></div>
    <script>
    
        $(function() {
    
                        $("#jqGrid").find('tr').draggable( {
                                    addClasses: false,
                                    // axis: "x" ,  //约束在水平轴 (x) 或垂直轴 (y) 上拖拽。可能的值:"x", "y"。
                                    // cancel: ".title",  //防止从指定的元素上开始拖拽。
                                    // cursorAt: { left: 5 },  //设置拖拽助手(helper)相对于鼠标光标的偏移。坐标可通过一个或两个键的组, { top, left, right, bottom }。
                                    //  delay: 300, 标按下后直到拖拽开始为止的时间,默认0
                                    // disabled: true, //如果设置为 true,则禁用该 draggable。
                                    //  distance: 10, //鼠标按下后拖拽开始前必须移动的距离,以像素计。
                                    //  grid: [ 50, 20 ] }, //对齐拖拽助手(helper)到网格,每个 x 和 y 像素。数组形式必须是 [ x, y ]。
                                    // handle: "h2", // 如果指定了该选项,则限制开始拖拽,除非鼠标在指定的元素上按下。只有可拖拽(draggable)元素的后代元素才允许被拖拽。
                                    //opacity: 0.35, //当被拖拽时助手(helper)的不透明度。
                                    //refreshPositions: true, //如果设置为 true,在每次鼠标移动(mousemove)时都会计算所有可放置的位置。
                                    //revert: true, //当拖拽停止时,元素是否还原到它的开始位置。
                                    //revertDuration: 200 , //还原(revert)动画的持续时间,以毫秒计。如果 revert 选项是 false 则忽略。
                                    //scope: "tasks" , //用于组合配套 draggable 和 droppable 项,除了 droppable 的 accept 选项之外。一个与 droppable 带有相同的 scope 值的 draggable 会被该 droppable 接受。
                                    //scroll: false , //如果设置为 true,当拖拽时容器会自动滚动。会出现滚动条  默认true
                                    // scrollSensitivity: 100, //窗口滚动距离
                                    // scrollSpeed: 100 ,  //窗口滚动速度
                                    //  snap: true,//元素是否对齐到其他元素。
                                    // snapMode: "inner" ,//决定 draggable 将对齐到对齐元素的哪个边缘。如果 snap 选项是 false 则忽略。可能的值:"inner"、"outer"、"both"。
                                    // snapTolerance: 30,  //从要发生对齐的对齐元素边缘起的距离,以像素计。如果 snap 选项是 false 则忽略。
                                    // stack: ".products" , //控制匹配选择器(selector)的元素集合的 z-index,总是在当前拖拽项的前面,在类似窗口管理器这样的事物中非常有用。
                                    // zIndex: 100, //当被拖拽时,助手(helper)的 Z-index。
    
                                    cursorAt: {
                                        top:8, left:48
                                    },
                                    iframeFix: true ,//防止拖拽期间 iframes 捕捉鼠标移动(mousemove )事件
                                    connectToSortable: ".goal_item_ul",  //拖放到指定元素
                                    containment: "window",  //约束在指定元素或区域的边界内拖拽。可能的值:"parent"、"document"、"window"。
                                    cursor: "move",  //拖拽操作期间的 CSS 光标。
                                    helper:"clone",   //允许一个 helper 元素用于拖拽显示。 original
                                    appendTo: "body",
                                    create: function( event, ui ) {
    
                                    },  //当 draggable 被创建时触发。
                                    drag: function( event, ui ) {
    //                                    var b = $(this).find('.this_b').text();
    //                                    $('.ui-draggable-dragging').html('<li class="ERP_moving"><a href="javascript:void(0);">'+b+'</a></li>')
                                    }, //在拖拽期间当鼠标移动时触发。
                                    start: function( event, ui ) {
                                        var b = $(this).find('.this_b').text();
                                        $('.ui-draggable-dragging').html('<li class="ERP_moving "><a href="javascript:void(0);">'+b+'</a></li>')
                                    },//当拖拽开始时触发。
                                    stop: function( event, ui ) {
                                        //用户ID
                                        var a = $(this).find('.this_a').text();
                                        //用户名称
                                        var b = $(this).find('.this_b').text();
                                        //已有用户
    
                                        $('.goal_item_ul').each(function(ii,dd){
                                            var item = $(dd).find('tr').siblings('li')
                                            item.each(function(i,d){
                                                if($(d).text() == b && $(d).attr('data_id') == a){
                                                    $(d).remove()
                                                }
                                            })
                                        })
    
                                        $('.goal_item_ul').find("tr[role='row']").replaceWith('<li class="ERP_moving" data_id="'+a+'" ><a href="javascript:void(0);">'+b+'</a></li>');
                                        $('.goal_item_ul').find('.ui-sortable-placeholder').html('<li class="ERP_moving" data_id="'+a+'"><a href="javascript:void(0);">'+b+'</a></li>');
    
                                            $('.ui-sortable-helper').remove()
    
                                        setTimeout(function(){
                                            $('.goal_item_ul').find('.ui-sortable-placeholder').remove()
                                            console.log('已删除')
                                        },1200)
    
                                    },//当拖拽停止时触发。
                                    revert:"invalid"
                                }
    
                        );
    
                        $(".goal_item_ul").sortable( {
                                    revert: true
                                })
                        $("ul, li").disableSelection();
    
                    }
            );
    </script>
    </body>
    </html>

    2.事件绑定

                $("#jqGrid").on('mouseover','tr',function(){
                    $(this)
                    .draggable( {
                                addClasses: false,
                                cursorAt: {
                                    top:8, left:48
                                },
                                iframeFix: true ,//防止拖拽期间 iframes 捕捉鼠标移动(mousemove )事件
                                connectToSortable: ".goal_item_ul",  //拖放到指定元素
                                containment: "window",  //约束在指定元素或区域的边界内拖拽。可能的值:"parent"、"document"、"window"。
                                cursor: "move",  //拖拽操作期间的 CSS 光标。
                                helper:"clone",   //允许一个 helper 元素用于拖拽显示。 original
                                appendTo: "body",
                                create: function( event, ui ) {
    
                                },  //当 draggable 被创建时触发。
                                drag: function( event, ui ) {
    //                                    var b = $(this).find('.this_b').text();
    //                                    $('.ui-draggable-dragging').html('<li class="ERP_moving"><a href="javascript:void(0);">'+b+'</a></li>')
                                }, //在拖拽期间当鼠标移动时触发。
                                start: function( event, ui ) {
                                    var b = $(this).find('.this_b').text();
                                    $('.ui-draggable-dragging').html('<li class="ERP_moving "><a href="javascript:void(0);">'+b+'</a></li>')
                                },//当拖拽开始时触发。
                                stop: function( event, ui ) {
                                    //用户ID
                                    var a = $(this).find('.this_a').text();
                                    //用户名称
                                    var b = $(this).find('.this_b').text();
                                    //已有用户
    
                                    $('.goal_item_ul').each(function(ii,dd){
                                        var item = $(dd).find('tr').siblings('li')
                                        item.each(function(i,d){
                                            if($(d).text() == b && $(d).attr('data_id') == a){
                                                $(d).remove()
                                            }
                                        })
                                    })
    
                                    $('.goal_item_ul').find("tr[role='row']").replaceWith('<li class="ERP_moving" data_id="'+a+'" ><a href="javascript:void(0);">'+b+'</a></li>');
    //                                    $('.goal_item_ul').find('tr').html('<li class="ERP_moving" data_id="'+a+'" ><a href="javascript:void(0);">'+b+'</a></li>');
                                    $('.goal_item_ul').find('.ui-sortable-placeholder').html('<li class="ERP_moving" data_id="'+a+'"><a href="javascript:void(0);">'+b+'</a></li>');
    
                                    $('.ui-sortable-helper').remove()
    
                                    setTimeout(function(){
                                        $('.goal_item_ul').find('.ui-sortable-placeholder').remove()
                                        console.log('已删除')
                                    },1200)
    
                                },//当拖拽停止时触发。
                                revert:"invalid"
                            }
    
                    );
                })

             $(".goal_item_ul").sortable( {
    
    
                                    revert: true
                                })
              $("ul, li").disableSelection();

     3.排序、放置、退拽等结合版

                $("#jqGrid").on('mouseover','tr',function(){
                    $(this)
                            .draggable( {
                                addClasses: false,
                                cursorAt: {
                                    top:8, left:48
                                },
                                delay: 0, //标按下后直到拖拽开始为止的时间,默认0
                                iframeFix: true ,//防止拖拽期间 iframes 捕捉鼠标移动(mousemove )事件
                                containment: "window",  //约束在指定元素或区域的边界内拖拽。可能的值:"parent"、"document"、"window"。
                                cursor: "move",  //拖拽操作期间的 CSS 光标。
                                helper:"clone",   //允许一个 helper 元素用于拖拽显示。 original
                                appendTo: "body",
                                create: function( event, ui ) {
    
                                },  //当 draggable 被创建时触发。
                                drag: function( event, ui ) {
    
                                }, //在拖拽期间当鼠标移动时触发。
                                start: function( event, ui ) {
                                    var b = $(this).find('.this_b').text();
                                    $('.ui-draggable-dragging').html('<li class="ERP_moving "><a href="javascript:void(0);">'+b+'</a></li>')
                                    $(this).draggable( "disable" );   //禁用 draggable
                                },//当拖拽开始时触发。
                                stop: function( event, ui ) {
                                    $(this).draggable( "enable" )  //启用 draggable
                                }//当拖拽停止时触发。
                            }
                    );
                })
    
                $(".goal_item_ul").droppable({
                    activeClass: "ui-state-default",
                    hoverClass: "ui-state-hover",
                    accept: ":not(.ui-sortable-helper)",
                    drop: function( event, ui ) {
                        $( this ).find( ".placeholder" ).remove();
                        var a = ui.draggable.find('.this_a').text()
                        var b = ui.draggable.find('.this_b').text()
                        var that =$(this)
                        var item = $(this).find('li')
                        var i_length = item.length
                        if(item.length>0){
                            item.each(function(i,d){
    
                                if($(d).find('a').text() == b && $(d).find('a').attr('data_id') == a){
                                    //有历史数据,去重
                                    return false;
                                }
                                else{
                                    if(i==i_length-1){
                                        //遍历所有,保证没重复的,创建新数据
                                        $( '<li class="ERP_moving"><a href="javascript:void(0);" data_id='+a+'>'+b+'</a></li>').appendTo(that);
                                        return false;
                                    }
                                }
                            })
                        }
                        else{
                            //最初始无数据,创建新数据
                            $( '<li class="ERP_moving "><a href="javascript:void(0);" data_id='+a+'>'+b+'</a></li>').appendTo(that);
                        }
                    }
                }).sortable({
                    items: "li:not(.placeholder)",
                    sort: function() {
                        // 获取由 droppable 与 sortable 交互而加入的条目
                        // 使用 connectWithSortable 可以解决这个问题,但不允许您自定义 active/hoverClass 选项
                        $( this ).removeClass( "ui-state-default" );
                    }
                });
    
                $("ul, li").disableSelection();
  • 相关阅读:
    Python项目生成requirements.txt的多种方式
    标准的Flask启动文件
    Flask的错误日志处理和|ORM操作
    Django的model中创建表
    Redis的删除机制、持久化 主从
    RabbitMQ 消息队列
    IP地址与子网掩码逐位相与
    IP地址转二进制
    一款很好用的工具
    放球问题
  • 原文地址:https://www.cnblogs.com/ysxq/p/5924001.html
Copyright © 2020-2023  润新知