将z索引按升序/降序动态分配给某个类的未知数量的元素
Dynamically assign z-index in ascending/descending order to unknown number of elements with a certain class
我有一个.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
像书中的页面一样排列在彼此之上,因此第一个.page
元素需要具有最高的z索引,该索引等于.book
中.page
元素的数量。
目前,我在CSS中手动分配每个.page
的z索引,但我希望有更多的灵活性
有没有办法计算.book
中.page
元素的数量,并使用javascript适当地动态分配z-index
?我也希望相反的情况发生。当.page
被翻转时,我希望z索引顺序以相反的顺序分配给它。
示例:
正常:
<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
翻转:
<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>
我对jQuery没意见。
JSFIDDLE
更新:
每个人的答案在简化的测试用例中都能正常工作,但当我在原始工作中使用它时,"z索引"顺序似乎没有更新
Fiddle:http://jsfiddle.net/jklm313/HwR9c/(无需您的代码(
我正在使用jQuery在点击'.page'元素时切换.flipped
类:
$('.page').click(function() {
$(this).toggleClass('flipped');
});
这是我将其应用于的地方,请随时使用:
响应式书籍版式
预订
要按顺序分配给未翻转的元素,这应该做到:
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);
}
);
}
);
}
这也适用:
$(".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();
});
如果没有,您将添加一个在页面点击之前执行的处理程序,它将停止点击事件传播
这里是
记住,我从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
});
}
});
});
});
http://jsfiddle.net/honk1/L8E8a/1/
是否要查找更少的行?
$(".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/
:(
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在Jquery detachment()和appendTo()之后定位元素
- 在动态创建的元素上获取对特定选择器的引用
- 根据元素和容器大小计算边距