Слепой эффект jQuery при перетаскивании Divs

#javascript #jquery #user-interface

#javascript #jquery #пользовательский интерфейс

Вопрос:

У меня есть несколько divs на странице, которые я могу перетаскивать. Я также внедрил эффект слепоты для них, чтобы я мог минимизировать и максимизировать содержимое, если я не хочу его видеть.

У меня проблема в том, что если у меня есть 3 элемента, уложенных друг на друга вертикально, и я перемещаю нижний справа от верхнего и минимизирую верхний div, все скользит вверх — и 3-й div, который я переместил вверх, скользит прямо с экрана!

Я перепробовал массу вещей, например, заставить divs использовать абсолютное позиционирование, но это вызывает проблемы с тем, что divs не скользят вверх при некоторых обстоятельствах. Динамическое изменение порядка divs приводит к тому, что divs разбрасываются по экрану из-за смещений и взаимного расположения.

Я просто хочу, чтобы, когда пользователь перетаскивает divs влево или вправо и «более ранний» div минимизируется, все последующие divs не перемещались.

Любые предложения по этому вопросу приветствуются.

Редактировать 1: Проблема, с которой я сталкиваюсь с абсолютным позиционированием, заключается в следующем. Я начинаю с A, B и C в вертикальном столбце. Все элементы развернуты. Я перемещаю B в правую часть от A и C прямо под B. Это дает мне 2 столбца (A — это один и B, C — это другой). Поскольку все является абсолютным, если я попытаюсь закрыть B, то C не продвинется вверх — это справедливо. Затем я попытался сделать вещи «выборочно» абсолютными, тем самым переключаясь между относительными и абсолютными, но у меня возникла проблема с координатами. Если у вас есть относительное положение и слева: 100 пикселей, а сверху:-50 пикселей, то изменение положения на абсолютное приводит к интерпретации этих координат в абсолютном контексте. Мой элемент управления исчезает с экрана. Я попытался исправить это, получив абсолютные координаты с помощью функции смещения 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, в котором я настраиваю несколько простых стилей. У меня есть несколько пустых стилей, которые я использую для доступа к divs на основе класса.

             .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

Это тело. Это просто несколько divs, которые представляют разные фрагменты контента. divs, помеченные классом «Hideable», — это те, которые закрыты 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>
  

Комментарии:

1. Не могли бы вы опубликовать какой-нибудь пример кода (возможно, на jsfiddle.net ) показывает такое поведение?

2. Ваша проблема определенно заключается в относительном позиционировании, которое позиционирует элементы относительно их нормального положения в потоке документов. Если вы измените размер своих divs, это изменит поток документов, следовательно, это изменит точку привязки относительно расположенных элементов. Можете ли вы показать какой-нибудь пример кода и объяснить, какие проблемы у вас возникают с абсолютным позиционированием?

3. Я обновил правки. Я тоже добавлю немного кода. Я сейчас на другом компьютере.

4. вау, когда я читал это, у меня появилась идея для сайта, который позволил бы вам… Спасибо Dutchie за jsfiddle.net 😉