表单拖动列,改变列的位置

表单拖动列,改变列的位置

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>无标题文档</title>
        <script src="jquery.min.js"></script>
        <style>
        td{color:#999}
        th{ cursor: move;line-height: 34px;min-width:150px;}
        .createDivBg{ position: fixed;top: 0;bottom: 0;left: 0;right: 0;z-index: 10000;cursor: move;-moz-user-select:none;-webkit-user-select: none;-o-user-select: none;-ms-user-select:none}
        .createDiv{ border: 1px dotted #ccc;height: 34px;line-height: 34px;background:#eee;position: absolute;z-index:100000}
        </style>
    </head>

    <body>

        <div class="Report">
            <table class="" border="1" cellspacing="0">
                <thead>
                    <tr>
                        <th value="1">公司名称</th>
                        <th value="2">订单号</th>
                        <th value="3">操作日期</th>
                        <th value="4">PNR</th>
                        <th value="5">乘客英文名</th>
                        <th value="6">乘客类型</th>
                        <th value="7">证件类型</th>
                        <th value="8">证件号</th>
                        <th value="9">乘客手机号码</th>
                        <th value="10">票面价</th>
                    </tr>
                </thead>
                <tbody>
                    <tr><td>蓝城房产建设管理集团有限公司</td><td>FA20160801144605983</td><td>2016-08-02</td><td>HY59C0</td><td></td><td>成人</td><td>身份证</td><td>330102196709050315</td><td>13705819983</td><td>-940.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                    <tr><td>东芝信息机器(杭州)有限公司</td><td>FA20160729123124926</td><td>2016-08-02</td><td>KTFW44</td><td></td><td>成人</td><td>身份证</td><td>36043019820211171X</td><td>13588837340</td><td>0.00</td></tr>
                </tbody>
            </table>
        </div>
    </body>
</html>
<script>
        var arrTh = [];//保存初始每个th位置的数组
        $('.Report th').each(function (i, e) {
            arrTh.push({ 'index': i, 'left': $(e).offset().left });
        });
        var thisThIndex = 0;
        var thisThLeft = 0;//存储当前拖拽层的位置
        var isMove = false;
        $(document).on('mousedown','.Report th', function (e) {
            var initX = e.pageX - $(this).offset().left;
            var initY = $(this).offset().top;//点击的th到页面顶部的距离
            var thisHtml = $(this).html();//点击的th的html
            thisThIndex = $(this).index();//点击的th的索引
            thisThLeft = $(this).offset().left;//当前拖拽层的位置
            
            $(this).css({ 'background': '#ccc' });
            var createDiv = $('<div class="createDiv">' + thisHtml + '</div>');//创建一个div用于拖拽显示
            var createDivBg = $('<div class="createDivBg"></div>');//创建一个背景,防止复制文字
            $('body').append(createDiv,createDivBg);//填充到页面中
            createDiv.css({ 'top': initY, 'left': $(this).offset().left });// 'width': $(this).width(),//设置拖拽层的初始位置
            $(document).on('mousemove', function (ev) {
                if (Math.abs(ev.pageX - e.pageX) > 30) {//如果鼠标移动的位置超过30
                    isMove = true;
                    thisThLeft = ev.pageX - createDiv.width() / 2;//刷新当前拖拽层的位置
                    if (thisThLeft <= $('.Report th').offset().left) {
                        thisThLeft = $('.Report th').offset().left;
                    }
                    if (thisThLeft >= ($('.Report th').offset().left+$('.Report table').width()-createDiv.width())) {
                        thisThLeft = $('.Report th').offset().left+$('.Report table').width()-createDiv.width();
                    }
                    createDiv.css({ 'left': thisThLeft, 'top': initY });//拖拽层跟着鼠标走
                    
                    var newsindex = 0;//循环的最后一个小于thisThLeft的索引
                    $.each(arrTh, function (index, element) {//遍历数组
                        var thIndex = element.index;//页面中所有th的索引
                        var thLeft = element.left;//页面中所有th到页面右边的距离
                        if (thisThLeft > thLeft) {
                            newsindex = thIndex;//循环的最后一个小于thisThLeft的索引
                        }
                    });
                    $('.Report th').eq(newsindex).css({ 'border-right': '2px solid red' }).siblings('th').css({ 'border-right': '1px solid #ddd' });//给当前th加边框
                    $('.Report tbody tr').each(function (tdindex, tdelement) {//给对应的列td加边框
                        $(tdelement).find('td').eq(newsindex).css({ 'border-right': '2px solid red' }).siblings('td').css({ 'border-right': '1px solid #ddd' });
                    });
                }
                
            });
        });
        $(document).on('mouseup', function (e) {
            
                $('.Report th').css({ 'border-right': '1px solid #ddd','background':'none' });
                $('.Report td').css({ 'border-right': '1px solid #ddd' });
                $('.createDiv').remove();
                $('.createDivBg').remove();
                $(document).unbind('mousemove');
        if (isMove) {
                isMove = false;
                var newsindex = 0;//循环的最后一个小于thisThLeft的索引
                $.each(arrTh, function (index, element) {
                    var thIndex = element.index;
                    var thLeft = element.left;
                    if (thisThLeft > thLeft) {
                        newsindex = thIndex;
                    }
                });
                var newth = $('.Report th').eq(thisThIndex).prop('outerHTML');
                //console.log(newsindex + ',,,' + thisThIndex);
                if (newsindex >= thisThIndex) {
                    if (newsindex != 0) {//如果是第一个的情况下
                    $('.Report th').eq(thisThIndex).remove();
                    $('.Report th').eq(newsindex-1).after(newth);
                   
                    }
                } else {
                    if ((newsindex + 2) != arrTh.length) {//如果是最后一个的情况下
                         $('.Report th').eq(thisThIndex).remove();
                        $('.Report th').eq(newsindex + 1).before(newth);
                       
                    }
                }
                $('.Report tbody tr').each(function (tdindex, tdelement) {
                    var newtd = $(tdelement).find('td').eq(thisThIndex).prop('outerHTML');
                    if (newsindex >= thisThIndex) {
                        if (newsindex != 0) {
                            $(tdelement).find('td').eq(thisThIndex).remove();
                            $(tdelement).find('td').eq(newsindex - 1).after(newtd);
                        }
                    } else {
                        if ((newsindex + 2) != arrTh.length) {
                            $(tdelement).find('td').eq(thisThIndex).remove();
                            $(tdelement).find('td').eq(newsindex + 1).before(newtd);
                        }
                    }
                   
                });
            }
            arrTh = [];//重置保存每个th位置的数组
            $('.Report th').each(function (i, e) {
                arrTh.push({ 'index': $(e).index(), 'left': $(e).offset().left });
                
            });
            //console.log(arrTh);
        });
</script>

完整代码请戳https://github.com/slailcp/dargtable/tree/master/drabTable

posted @ 2019-10-18 14:12  老虎死了还有狼  阅读(351)  评论(0编辑  收藏  举报