jQuery对拖曳Div的盲目效果

时间:2011-05-17 20:55:09

标签: javascript jquery user-interface

我在页面上有很多div,我可以拖放。我还对它们实施了盲目效果,这样如果我不想看到它,我可以最小化和最大化内容。

我遇到了一个问题,如果我有3个物品堆叠在一起,垂直,我将底部一个移动到顶部的一个,并最小化顶部div,一切都向上滑动 - 和第三个我向上移动的div滑出屏幕!

我已经尝试了很多东西,比如让div使用绝对定位,但这会导致div在某些情况下不会向上滑动的问题。由于偏移和相对定位,动态重新排序div导致div被抛出屏幕。

我只是想要它,以便当用户将div向左或向右拖动并且“较早”的div最小化时,所有后续div都不会被移动。

非常感谢有关此问题的任何建议。

编辑1: 我对绝对定位的问题如下。 我从垂直列中的A,B和C开始。所有项目都已扩展。我将B移动到A和C的右侧,在B的正下方。这给了我2列(A为1,B为C,C为另一列)。一切都是绝对的,如果我试图关闭B,那么C不会向上移动 - 这是正确的。 我尝试然后“选择性地”使事情绝对,从而在相对和绝对之间翻转,但我遇到了坐标的问题。如果你有一个相对位置并且左边:100px和top:-50px,那么将位置翻转为绝对会导致这些坐标在绝对上下文中被解释。我的控件飞离屏幕。我尝试通过使用jQuery的偏移函数获取绝对坐标来修复此问题,但是这会返回相对坐标并且我被卡住了。我试图自己保持绝对坐标,但由于某种原因它不起作用。它失控了:)。

的Javascript

加载页面时会调用此javascript绑定。我将此函数绑定到PNG箭头,以便在按下箭头时,相应div中的内容会扩展和收缩。

                $('.ArrowMargin').bind('click', function () {

                var splits = this.src.split("/");

                var action = "";
                if (splits.length >= 2) {
                    var folder = splits[splits.length - 2];
                    var image = splits[splits.length - 1];

                    if (folder == "Images") {
                        if (image == "arrow_open.png") {
                            action = "close";
                            this.src = "Images/arrow_closed.png";
                        } else {
                            action = "open";
                            this.src = "Images/arrow_open.png";
                        }
                    }
                }
                var divs = document.getElementsByTagName("div");

                if (action != "") {
                    var options = {};
                    for (var i = 0; i < divs.length; i++) {
                        var element = divs[i];
                        if (element.className.indexOf("Hideable") != -1) {
                            if (this.parentNode.parentNode == element.parentNode) {
                                if (action == "open") {
                                    var jQueryObj = jQuery(element);
                                    jQueryObj.show("blind", options, 500, null);
                                } else {
                                    var jQueryObj = jQuery(element);
                                    jQueryObj.hide("blind", options, 500, null);
                                }
                                break;
                            }

                        }
                    }

CSS

这是CSS设置一些简单样式的东西。我有一些空的样式,我用它来基于类访问div。

            .ArrowMargin { float:right; margin:0 5px 0 0; }         

            .alpha { width:300px; background-color:#000000; border-color:#424242; border-width:1px; border-style:solid; color:#c59e32; -moz-border-radius: 15px;  }

        .bravo { width:300px; background-color:#000000; border-color:#424242; border-width:1px; border-style:solid; color:#c59e32; -moz-border-radius: 15px; }

        .delta { width:300px; background-color:#000000; border-color:#424242; border-width:1px; border-style:solid; color:#c59e32; -moz-border-radius: 15px;}

        .charlie{}

        .echo{}

HTML BODY

这是身体。它只是代表不同内容的一些div。标有“可隐藏”类的div是jQuery盲目的那些。

<body>
    <div class="alpha">
        <div class="LeftColumnCellTitle">                
            <span class="TitleMargin">foobar1</span>
            <img class="ArrowMargin" src="Images/arrow_open.png" alt="Open"/>
        </div>            
        <div class="ui-widget-content ui-corner-all Hideable Center"></div>
    </div>

    <div class="bravo">
        <div class="LeftColumnCellTitle">
            <span class="TitleMargin">foobar2</span>
            <img class="ArrowMargin" src="Images/arrow_open.png" alt="Open"/>
        </div>
        <div class="ui-widget-content ui-corner-all Hideable charlie"></div>
    </div>

    <div class="delta">
        <div class="LeftColumnCellTitle">
            <span class="TitleMargin">foobar3</span>
            <img class="ArrowMargin" src="Images/arrow_open.png" alt="Open"/>
        </div>
        <div class="ui-widget-content ui-corner-all Hideable echo"></div>
    </div>
</body>

0 个答案:

没有答案