Изменение z-индекса, чтобы сделать щелчок div сверху

В моем приложении я могу открыть несколько полей div, которые перекрывают друг друга. При нажатии на поле, которое окно должно быть перемещено в верхнюю часть. Каков наилучший способ сделать это?

Единственное, что я могу придумать, - это перебрать все значения z-index в ящики, чтобы получить самое высокое значение, а затем добавить 1 к этому значению и применить его к нажатому div.

Любые советы для меня?

Ответ 1

что-то вроде этого должно это сделать:

// Set up on DOM-ready
$(function() {
    // Change this selector to find whatever your 'boxes' are
    var boxes = $("div");

    // Set up click handlers for each box
    boxes.click(function() {
        var el = $(this), // The box that was clicked
            max = 0;

        // Find the highest z-index
        boxes.each(function() {
            // Find the current z-index value
            var z = parseInt( $( this ).css( "z-index" ), 10 );
            // Keep either the current max, or the current z-index, whichever is higher
            max = Math.max( max, z );
        });

        // Set the box that was clicked to the highest z-index plus one
        el.css("z-index", max + 1 );
    });
});

Ответ 2

Предполагая, что у вас есть элементы с определенным классом ( "поле" в моем примере), и все они находятся в одном контейнере:

<div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
</div>

Предполагая, что у вас есть правильный css:

.box {position:absolute; z-index:10}

Вы можете использовать код jquery js ниже:

$('.box').click(function() {
   // set ohters element to the initial level
   $(this).siblings('.box').css('z-index', 10);
   // set clicked element to a higher level
   $(this).css('z-index', 11);
});

Ответ 3

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

(function() {
    var highest = 1;

    $.fn.bringToTop = function() {
        this.css('z-index', ++highest); // increase highest by 1 and set the style
    };
})();

$('div.clickable').click(function() {
    $(this).bringToTop();
});

Это не сработает, если вы установите z-index на любой другой код на своей странице.

Ответ 4

вы можете сделать что-то вроде этого с помощью jquery:

$('# div'). click (function() {$ (this).css('zIndex', '10000'});

это будет работать до тех пор, пока z-индекс для всех базовых divs будет ниже 10000. Или вы можете написать функцию для итерации всех div и получения наивысшего z-индекса и перемещения клика на это число +1.

Ответ 5

Ваша идея получить наивысший z-индекс - это способ пойти, я думаю.

однако, вместо того, чтобы перебирать его по каждому клику, я прокручивал его только один раз при загрузке страницы и поддерживал бы объект, в котором хранится самый высокий z-индекс.

CONSTANTS = {
    highest_z_index = 0;
};

function getHighestZ (){
    var $divs = $('div');

    $.each($divs,function(){
        if (this.css('z-index') > CONSTANTS.highest_z_index){
            CONSTANTS.highest_z_index = this.css('z-index');
        }
    });
}

getHighestZ();

$('#YourDiv').click(function(){
    if (CONSTANTS.highest_z_index > $(this).css('z-index'){
         $(this).css('z-index',++CONSTANTS.highest_z_index);
    }
});