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

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

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

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

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

5 ответов


я обновил ваш 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. см. каково самое высокое целочисленное значение JavaScript, на которое может перейти число без потери точности? для получения дополнительной информации.


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

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


следующий код выполнит ваши требования. Вам нужно 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 Здесь.


Edit:

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

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

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

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

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

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

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