我有一个类.book
的元素,其中包含类.page
的随机数量的元素。
<div class='book'>
<div class='page'></div>
<div class='page'></div>
<div class='page'></div>
<div class='page'></div>
<div class='page'></div>
</div>
.pages
s像书中的页面一样排列在彼此之上,因此第一个.page
元素需要具有最高的z-index,其等于{{1 .page
中的元素。
目前我在CSS中手动分配每个.book
的z-index,但我希望更灵活。
有没有办法计算.page
中.page
元素的数量,并使用javascript动态分配.book
?我也喜欢反向发生。当翻转z-index
时,我希望以相反的顺序分配给它的z-index顺序。
例:
正常:
.page
前三个<div class='book'>
<div class='page' style='z-index: 5'></div>
<div class='page' style='z-index: 4'></div>
<div class='page' style='z-index: 3'></div>
<div class='page' style='z-index: 2'></div>
<div class='page' style='z-index: 1'></div>
</div>
翻转:
.page
我对jQuery没问题。
更新:
每个人的答案都适用于简化的测试用例,但是当我在原始作品中使用它时,&#39; z-index&#39;订单似乎没有更新。
小提琴:http://jsfiddle.net/jklm313/HwR9c/(没有你的代码)。
我使用jQuery在&#39; .page&#39;上切换<div class='book'>
<div class='page flipped' style='z-index: 1'></div>
<div class='page flipped' style='z-index: 2'></div>
<div class='page flipped' style='z-index: 3'></div>
<div class='page' style='z-index: 2'></div>
<div class='page' style='z-index: 1'></div>
</div>
课程。单击它时的元素:
.flipped
我在这里应用此功能,请随时使用:
Responsive Book Layout
Book
答案 0 :(得分:2)
要按顺序分配给非翻转元素,这应该可以解决问题:
var max = $('div.book div.page:not(.flipped)').length;
$('div.book div.page:not(.flipped)').each(
function() {
$(this).css('z-index', max--);
}
);
然后,分配给翻转的元素:
var count = 0;
$('div.book div.flipped').each(
function() {
$(this).css('z-index', ++count);
}
);
由于页面上有多个书籍元素,因此您的构造方式会略有不同:
$('div.book').each(
function() {
var max = $(this).children('div.page:not(.flipped)').size();
$(this).children('div.page:not(.flipped)').each(
function() {
$(this).css('z-index', max--);
}
);
var count = 0;
$(this).children('div.flipped').each(
function() {
$(this).css('z-index', ++count);
}
);
}
);
要在单击图书时重新分配,请将上述代码放入函数中,然后在图书点击事件中调用该函数,如下所示:
// Slightly modified to work properly, and calls the index function
$('.page').click(function() {
$(this).removeClass('no-anim').toggleClass('flipped');
e.stopPropagation();
indexPages();
});
// Putting zindex assignment into a function for reuse
function indexPages() {
$('div.book').each(
function() {
var max = $(this).children('div.page:not(.flipped)').size();
$(this).children('div.page:not(.flipped)').each(
function() {
$(this).css('z-index', max--);
}
);
var count = 0;
$(this).children('div.flipped').each(
function() {
$(this).css('z-index', ++count);
}
);
}
);
}
答案 1 :(得分:1)
这也有效:
$(".book").each(function(){
var pages=$(this).find(".page")
var pages_flipped=$(this).find(".flipped")
pages.each(function(){
$(this).css("z-index",pages.length-pages.index($(this)))
})
pages_flipped.each(function(){
$(this).css("z-index",pages_flipped.index($(this))+1)
})
})
至于您的更新,正确的代码是:
$('.page').click(function() {
$(this).removeClass('no-anim').toggleClass('flipped');
e.stopPropagation();
});
如果不是,则添加在页面单击之前执行的处理程序,并停止单击事件传播
答案 2 :(得分:1)
你去吧
请记住,我从0开始,所以如果你想提高它,你必须这样做
zIndex: i + 1
这是jquery
$(function() {
$(".book").each(function() {
$(this).find("div").each(function(i) {
if ($(this).is(".flipped")) {
$(this).css({
zIndex: i
});
} else {
$(this).css({
zIndex: $(this).parent().find("div").length - i
});
}
});
});
});
答案 3 :(得分:0)
寻找更少的线?
$(".book").each(function() {
$(this).find("div").each(function(i) {
var level = $(this).is(".flipped") ? i : ($(this).parent().find("div").length - 1) - i;
$(this).css("zIndex", level);
});
});
http://jsfiddle.net/honk1/L8E8a/3/
修改强>
等一下:
$(".book").each(function() {
$(this).find("div").each(function(i) {
$(this).css("zIndex", $(this).is(".flipped") ? (i + 1) : $(this).parent().find("div").length - i);
});
});
http://jsfiddle.net/honk1/L8E8a/5/
:)