2011-12-19 39 views
10

Trong ứng dụng của tôi, tôi có thể mở nhiều hộp div chồng lên nhau. Khi nhấp vào hộp, hộp đó sẽ được di chuyển lên trên cùng. cách tốt nhất để thực hiện điều này là gì?Thay đổi chỉ mục z để thực hiện div được nhấp xuất hiện trên đầu trang

Điều duy nhất tôi có thể nghĩ là lặp qua tất cả các giá trị z-index của hộp để nhận giá trị cao nhất, sau đó thêm 1 vào giá trị đó và áp dụng nó trên div được nhấp.

Bất kỳ lời khuyên nào cho tôi?

+0

Mã, hình, mọi thứ giúp chúng tôi hiểu những gì bạn muốn! Tôi chỉ không thể hiểu làm thế nào tôi có thể bấm vào hộp nếu hộp đó là đằng sau một hộp! hoặc bạn cần phải là những phần của hộp đó được hiển thị! –

Trả lời

14

một cái gì đó như thế này nên làm điều đó:

// 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); 
    }); 
}); 
+0

Giải pháp thú vị. Nhưng tại sao bạn sử dụng parseInt trong trường hợp này? Cảm ơn câu trả lời bằng cách này! – holyredbeard

+1

chắc chắn! tôi đã sử dụng 'parseInt' vì gọi $(). css (" z-index ") sẽ trả về chỉ mục z của phần tử thành một chuỗi, nhưng chúng ta cần một số để chuyển tới Math.max. – keeganwatkins

+1

thực sự, 'Math.max()' sẽ chuyển đổi chuỗi thành số tự động, nhưng giá trị mặc định cho các phần tử không có chỉ mục z rõ ràng là 'tự động' sẽ trả về 'NaN' khi được chuyển đến' Math.max() ' – keeganwatkins

4

tôi sẽ tiếp cận này bằng cách làm cho một plugin jQuery, vì vậy bạn không cần phải lo lắng về việc tự thiết lập các z-index và theo dõi các giá trị cao nhất với một biến:

(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(); 
}); 

này sẽ không hoạt động nếu bạn đặt z-index với bất kỳ mã nào khác trên trang của bạn.

+2

Tôi đã lấy mã này ra một chút nữa https://github.com/dangayle/jQuery-z-index –

0

bạn có thể làm một cái gì đó như thế này với jquery:.

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

điều này sẽ hoạt động miễn là chỉ mục z cho tất cả các div nằm dưới thấp hơn 10000. Hoặc bạn có thể viết hàm để lặp tất cả các div và nhận chỉ mục z cao nhất và di chuyển nhấp vào số đó +1.

0

ý tưởng của bạn nhận được chỉ số z cao nhất là cách tôi nghĩ. Tuy nhiên,

tuy nhiên, thay vì lặp qua nó trên mỗi lần nhấp, tôi sẽ chỉ lặp lại nó một lần trên tải trang và duy trì một đối tượng lưu trữ chỉ mục z cao nhất.

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); 
    } 
}); 
5

Giả sử bạn có các yếu tố với một lớp cụ thể ("hộp" trong ví dụ của tôi) và rằng tất cả đều trong cùng một container như thế này:

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

Giả sử bạn có css đúng:

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

Bạn có thể sử dụng jquery js mã bên dưới:

$('.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); 
}); 
Các vấn đề liên quan