Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Я обновил свой CSS и Javascript. Не используйте "! Important" в 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 может идти без потери точности? для получения дополнительной информации.

Ответ 2

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

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

Ответ 3

Следующий код будет соответствовать вашим требованиям. Вам нужно stack ваш divs вместо установки z-indexes, а во-вторых, вам нужно показать div сверху, просто щелкнув по нему, не перетаскивая его.

Итак, для стекирования вам нужно stack: "div" и для отображения элемента div сверху, просто нажмите, вам нужно использовать distance: 0.

По умолчанию значение distance: 10 означает, что до тех пор, пока вы не перетащите его 10 pixels, он не будет отображаться вверху. Установив значение distance: 0, он будет отображаться сверху после простого нажатия.

Попробуйте использовать следующий код.

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

Рабочий JSFiddle Здесь.


Изменить:

Нажмите кнопку Run code snippet ниже, чтобы выполнить этот встроенный фрагмент кода.

$(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>

Ответ 4

Самый простой способ решить эту проблему - использовать опции appendTo и zIndex.

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

Ответ 5

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

$(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/

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