it-swarm.com.ru

Установка z-index для перетаскиваемых элементов

Я пытаюсь установить z-index для перетаскиваемых элементов с помощью jQuery. Вы можете видеть то, о чем я говорю и что у меня есть до сих пор здесь:

http://jsfiddle.net/sushik/LQ4JT/1/

Это очень примитивно и с этим есть проблемы. Любые идеи о том, как сделать так, чтобы последний нажатый элемент имел наивысший z-индекс, и вместо того, чтобы сбрасывать все остальные значения в базовый z-index, имеют их шаг, поэтому второй от последнего нажатый имеет второй по величине z-index и т.д. 

Другая проблема, с которой я столкнулся, заключается в том, что она работает только для события полного щелчка, но перетаскиваемая функциональность работает путем нажатия и удерживания. Как я мог применить класс к тому начальному щелчку вниз и не ждать, когда произойдет отпускание щелчка? 

33
Zac

Я обновил ваш CSS и Javascript. Не используйте «! Важное» в CSS, если вы не настолько отчаянно.

http://jsfiddle.net/LQ4JT/7/

    $(document).ready(function() {
        var a = 3;
        $('#box1,#box2,#box3,#box4').draggable({
            start: function(event, ui) { $(this).css("z-index", a++); }
        });
    $('#dragZone div').click(function() {
        $(this).addClass('top').removeClass('bottom');
        $(this).siblings().removeClass('top').addClass('bottom');
        $(this).css("z-index", a++);
    });

});

Хотя этот ответ работает, у него есть ограничение на максимальное число 2 ^ 31−1 в javascript . Refer Какое наибольшее целочисленное значение JavaScript, к которому может идти Number без потери точности? для получения дополнительной информации.

27
Mahesh

Все, что вам нужно сделать, это использовать draggable({stack: "div"}) Теперь, когда вы перетаскиваете div, он автоматически поднимается наверх.

Проверьте рабочий пример на http://jsfiddle.net/LQ4JT/8/

56
Hussein

Der folgende Code wird Ihre Anforderungen erfüllen. Sie müssen stackIhr divsanstatt z-indexes zu setzen, und zweitens müssen Sie das div oben anzeigen, nachdem Sie einfach darauf geklickt und es nicht gezogen haben.

Zum Stapeln benötigen Sie также stack: "div" und zum Anzeigen des div-Elements oben durch einfaches Klicken müssen Sie distance: 0 verwenden.

Standardmässig lautet der Wert distance: 10. Das heißt, wenn Sie 10 pixels nicht ziehen, wird er nicht oben angezeigt. Wenn Sie Den Wert auf distance: 0 setzen, wird er nach einem einfachen Klick oben angezeigt.

Versuchen Sie den Folgenden Code.

$('#box1,#box2,#box3,#box4').draggable({
    stack: "div",
    distance: 0
});

Hier arbeitet JSFiddle.


Bearbeiten:

Drücke DenRun code snippetSchaltfläche unten, гм умрет eingebettete Code-Snippet auszuführen.

$(document).ready(function() {

  $('#box1,#box2,#box3,#box4').draggable({
    stack: "div",
    distance: 0
  });

  $('#dragZone div').click(function() {
    $(this).addClass('top').removeClass('bottom');
    $(this).siblings().removeClass('top').addClass('bottom');

  });
});
#box1 {
  width: 150px;
  height: 150px;
  background-color: red;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: 0
}

#box2 {
  width: 150px;
  height: 150px;
  background-color: green;
  position: absolute;
  top: 20px;
  left: 50px;
  z-index: 0
}

#box3 {
  width: 150px;
  height: 150px;
  background-color: yellow;
  position: absolute;
  top: 50px;
  left: 100px;
  z-index: 0
}

#box4 {
  width: 150px;
  height: 150px;
  background-color: blue;
  position: absolute;
  top: 70px;
  left: 200px;
  z-index: 0
}

.top {
  z-index: 100!important;
  position: relative
}

.bottom {
  z-index: 10!important;
  position: relative
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>

<div id="dragZone">
  <div id="box1"></div>
  <div id="box2"></div>
  <div id="box3"></div>
  <div id="box4"></div>
</div>
7
Suhaib Janjua

Самым простым способом, который я нашел для решения этой проблемы, было использование опций appendTo и zIndex.

$('#box1,#box2,#box3,#box4').draggable({
  appendTo: "body",
  zIndex: 10000
});
4
Caedmon

Вот очень упрощенная версия ответа Махеша:

$(document).ready(function() {
  var a = 1;
  $('#box1,#box2,#box3,#box4,#box5,#box6,#box7').draggable({
    start: function(event, ui) { $(this).css("z-index", a++); }
  });
});

http://jsfiddle.net/LQ4JT/713/

Кажется, все еще работает хорошо, если я что-то упустил.

0
Jehan