sortable Div拖动自动排版,保存位置

 

记得很久没有写blog了,可能是因为人累了,心也累了,哎。。。 这是最近一个项目中用到的一个主界面,贴上来希望可以帮到一些朋友。

效果图:

 

这是可以直接运行看实例的,注释不多,有例子,有代码,应该差不多了,另外还有三个jquery包,可以到网上下载。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        html, body
        {
            height: 100%;
            margin: 0px;
            padding: 0px;
            font-size: 12px;
        }
       
        #dvAll
        {
            width: 100%;
        }
        #dvAll div
        {
        }
        .dvallChild
        {
            margin-top: 5px;
            float: left;
            margin-left: 5px;
            height:100%;
        }
        .dvallChild div
        {
        }
       
        .dvcontent
        {
            cursor: move;
            width: 100%;
            height: 27px;
            line-height: 27px;
            vertical-align: middle;
            margin-top: 0px;
            border: solic 1px green;
            background-color: Blue;
            background-image: url('bg.gif');
        }
        .hovercls:
        {
            border: 1px dashed red;
            background: red;
            height: 200px;
            line-height: 20px;
        }
        .placeholder
        {
            border-bottom: gray 2px dashed;
            border-left: gray 2px dashed;
            min-height: 100px;
            margin-bottom: 20px;
            border-top: gray 2px dashed;
            border-right: gray 2px dashed;
        }
       
        .cursorAt
        {
        }
        .noremove
        {
            margin-top: 5px;
            line-height: 20px;
        }
       
        .dvChild
        {
            border: 1px solid #D2D2D2;
            margin-top: 5px;
        }
        .dvtitlecls
        {
            font-weight: bolder;
            float: left;
            width: 90%;
            text-indent: 5px;
        }
        .dvdocls
        {
            float: left;
            width: 10%;
            font-weight: bolder;
            cursor: pointer;
            text-align:right;
           
        }
        .dvFont
        {
            margin-left: 5px;
            margin-right: 5px;
        }
    </style>
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery-ui.min.js"></script>
    <script type="text/javascript" src="js/jquery.cookie.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            $(".dvallChild").sortable({
                connectWith: '.dvallChild',    //指定拖动区域
                //         items: ':not(.noremove)',
                opacity: 0.5,                       //透明度
                //    helper: 'original',
                placeholder: "placeholder",     //拖动虚线框
                revert: true,                           //是否有动画
                dropOnEmpty: true, 
                distance: 10,
                appendTo: 'body',
                cancel: '.noremove'             //不参加拖动
                //       zIndex: 10
            });
            //从本地cookie获取布局
            ReadLayoutPosition();
        });

        //布局 1:3     1:2:1          3:1             1:1:1
        function ControlLayout(t) {
            if (t == 1) {
                $("#dvleft").css("width", "24%");
                $("#dvcenter").css("width", "73%");
                $("#dvright").css("width", "0");

                var dvobjleft = $("#dvleft").children("div");
                var dvobjcenter = $("#dvcenter").children("div");
                var dvobjright = $("#dvright").children("div");
                //  1:3
                if (dvobjleft.length >= 1 && dvobjcenter.length >= 1 && dvobjright.length == 0) {

                }
                else if (dvobjcenter.length >= 1 && dvobjright.length == 0 && dvobjleft.length == 0) {
                    //1:1:1
                    $("#dvleft").append(dvobjcenter[0]);
                }
                else if (dvobjright.length >= 1 && dvobjleft.length == 0 && dvobjcenter.length >= 1) {
                    // 3:1

 

                    var obj2 = $("#dvright");
                    $("#dvleft").append(obj2[0].innerHTML);
                    obj2[0].innerHTML = "";
                }
                else if (dvobjright.length >= 1 && dvobjleft.length >= 1 && dvobjcenter.length >= 1) {
                    // 1:2:1
                    var obj2 = $("#dvright");
                    $("#dvleft").append(obj2[0].innerHTML);
                    obj2[0].innerHTML = "";
                }
            }
            else if (t == 2) {
                $("#dvleft").css("width", "24%");
                $("#dvcenter").css("width", "49%");
                $("#dvright").css("width", "24%");
                var dvItem = null;

                var dvobjleft = $("#dvleft").children("div");
                var dvobjcenter = $("#dvcenter").children("div");
                var dvobjright = $("#dvright").children("div");
                //  1:3
                if (dvobjleft.length >= 1 && dvobjcenter.length >= 1 && dvobjright.length == 0) {

                    var obj2 = $("#dvleft");
                    $("#dvright").append(obj2[0].innerHTML);
                    obj2[0].innerHTML = "";

                }
                else if (dvobjcenter.length > 2 && dvobjright.length == 0 && dvobjleft.length == 0) {
                    //1:1:1
                    $("#dvleft").append(dvobjcenter[0]);
                    $("#dvright").append(dvobjcenter[1]);
                }
                else if (dvobjright.length >= 1 && dvobjleft.length == 0 && dvobjcenter.length >= 1) {
                    // 3:1
                    $("#dvleft").append(dvobjright[0]);
                }
                else if (dvobjright.length >= 1 && dvobjleft.length >= 1 && dvobjcenter.length >= 1) {

                }


            }
            else if (t == 3) {
                $("#dvleft").css("width", "0");
                $("#dvcenter").css("width", "73%");
                $("#dvright").css("width", "24%");

                var dvobjleft = $("#dvleft").children("div");
                var dvobjcenter = $("#dvcenter").children("div");
                var dvobjright = $("#dvright").children("div");

                //  1:3
                if (dvobjleft.length >= 1 && dvobjcenter.length >= 1 && dvobjright.length == 0) {
                    var obj2 = $("#dvleft");
                    $("#dvright").append(obj2[0].innerHTML);
                    obj2[0].innerHTML = "";
                }
                else if (dvobjcenter.length >= 1 && dvobjright.length == 0 && dvobjleft.length == 0) {
                    //1:1:1
                    $("#dvright").append(dvobjcenter[0]);

                }
                else if (dvobjright.length >= 1 && dvobjleft.length == 0 && dvobjcenter.length >= 1) {
                    // 3:1


                }
                else if (dvobjright.length >= 1 && dvobjleft.length >= 1 && dvobjcenter.length >= 1) {
                    // 1:2:1

                    var obj2 = $("#dvleft");
                    $("#dvright").append(obj2[0].innerHTML);
                    obj2[0].innerHTML = "";
                }
            }
            else if (t == 4) {
                $("#dvleft").css("width", "0");
                $("#dvcenter").css("width", "97%");
                $("#dvright").css("width", "0");

                var obj1 = $("#dvleft");
                var obj2 = $("#dvright");


                if (obj1.length > 0) {
                    $("#dvcenter").append(obj1[0].innerHTML);
                }
                if (obj2.length > 0) {
                    $("#dvcenter").append(obj2[0].innerHTML);
                }
                obj1[0].innerHTML = "";
                obj2[0].innerHTML = "";
            }
        }


        function SetControlToOther(ofrom, oto) {
            var obj = ofrom[0].innerHTML;
            oto.append(obj);
            ofrom[0].innerHTML = "";
        }
     
      //保存当前布局cookie
        function setLayoutPosition() {
            var dvlist = "";
            $.each($(".dvallChild"), function (m) {
                dvlist += $(this).attr('id') + ":";
                $.each($(this).children(".dvChild"), function (n) {
                    dvlist += $(this).attr('id') + "@";
                });
                dvlist += ":" + $(this).css('width');
                dvlist += "|";
            });
            $.cookie("dvlist", dvlist)
            alert("保存成功");
        }

        //读取cookie
        function ReadLayoutPosition() {
            var dvlist = $.cookie("dvlist");
            if (dvlist != null) {
                //  document.write(dvlist);
                var arrayColumn = dvlist.split('|');
                $.each(arrayColumn, function (m, n) {
                    var elemId = n.split(':');
                    var arrRow = n.split(':')[1] ? n.split(':')[1].split('@') : "";
                    //获取宽度
                    $("#" + elemId).css("width", n.split(':')[2]);
                    $.each(arrRow, function (m, n) {
                        if (n) {
                            //把序列填加进容器
                            $("#" + elemId).append($("#" + n).attr('id', n));
                        }
                    });

                });
            }
        }

        function SetExpand() {

        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div style="padding-top: 10px; text-indent: 8px;">
        <a href="#none" οnclick="ControlLayout(1)">1:3</a> <a href="#none" οnclick="ControlLayout(2)">
            1:2:1</a> <a href="#none" οnclick="ControlLayout(3)">3:1</a> <a href="#none" οnclick="ControlLayout(4)">
                1:1:1</a>
    </div>
    <div>
        <input type="button" id="btnsetCook" value="保存位置" οnclick="setLayoutPosition()" />
    </div>
    <div id="dvAll">
        <div id="dvleft" style="width: 24%;" class="dvallChild">
            <div class="dvChild" id="c1">
                <div class="dvcontent">
                    <div class="dvtitlecls">
                        相册</div>
                    <div class="dvdocls" οnclick="SetExpand()">
                        --&nbsp;&nbsp;</div>
                </div>
                <div class="noremove" id="abc1">
                    <div class="dvFont">
                        内容内容内容内容内容内容内容内容内容内容内容 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
                        内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
                    </div>
                </div>
            </div>
            <div class="dvChild" id="c2">
                <div class="dvcontent">
                    <div class="dvtitlecls">
                        留言板</div>
                    <div class="dvdocls">
                        --&nbsp;&nbsp;</div>
                </div>
                <div class="noremove">
                    <div class="dvFont">
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ssaa
                    </div>
                </div>
            </div>
        </div>
        <div id="dvcenter" style="width: 49%;" class="dvallChild">
            <div class="dvChild" id="c3">
                <div class="dvcontent">
                    <div class="dvtitlecls" >
                        个人中心</div>
                    <div class="dvdocls" >
                         --&nbsp;&nbsp;</div>
                </div>
                <div class="noremove">
                    <div class="dvFont">
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ssaa
                    </div>
                </div>
            </div>
        </div>
        <div id="dvright" style="width: 24%;" class="dvallChild">
            <div class="dvChild" id="c4">
                <div class="dvcontent">
                    <div class="dvtitlecls">
                        QQ农场</div>
                    <div class="dvdocls">
                         --&nbsp;&nbsp;</div>
                </div>
                <div class="noremove">
                    <div class="dvFont">
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss 内容.内容.内容.内容.内容.内容.ss
                        内容.内容.内容.内容.内容.内容.ssaa
                    </div>
                </div>
            </div>
        </div>
    </div>
    </form>
</body>
</html>

转载于:https://www.cnblogs.com/syyblog/archive/2012/04/19/2456562.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值