gpt4 book ai didi

jquery - 根据其容器子项的数量计算
高度()

转载 作者:行者123 更新时间:2023-11-27 23:30:05 27 4
gpt4 key购买 nike

我在这里试图实现的是根据其容器 children() 的数量计算每个子级的宽度和高度。

宽度=容器宽度/它的 child 数量Height = Width (or) Width*0.75 (or) Width*0.5625 '根据if条件

这是我的代码总是返回 height = tileHeightSquare

有什么想法吗??

<style>
.container {
background-color:#FFF;
display:table;
box-sizing:border-box;
width:100%;
}
.tile {
background-color:silver;
display:table-cell;
vertical-align:middle;
text-align:center;
-moz-box-shadow: inset 0 0 0 3px #FFF;
-webkit-box-shadow: inset 0 0 0 3px #FFF;
box-shadow: inset 0 0 0 3px #FFF;
}
</style>

<HTML>
<main class="container">
<article class="tile">
<h1>A1</h1>
</article>

<article class="tile">
<h1>A2</h1>
</article>
</main>

<main class="container">
<article class="tile">
<h1>B1</h1>
</article>
<article class="tile">
<h1>B2</h1>
</article>
<article class="tile">
<h1>B3</h1>
</article>
</main>

<main class="container"></main>

</HTML>




<script>
function flexTiles() {
$('.container').each(function() {
var noOfTiles = $(this).children().length; //no of tiles in each container
var containerWidth = $(this).innerWidth(); //main container width
var tileWidth = (containerWidth / noOfTiles);
var tileHeightBox = tileWidth;
var tileHeightSquare = tileWidth * 0.75;
var tileHeightWide = tileWidth * 0.5625;
if (noOFTiles = 1) {
$(this).children().css({
'width': tileWidth + 'px',
'height': tileHeightWide + 'px'
});
}
if (noOFTiles = 2) {
$(this).children().css({
'width': tileWidth + 'px',
'height': tileHeightSquare + 'px'
});
} else {
$(this).children().css({
'width': tileWidth + 'px',
'height': tileHeightBox + 'px'
});
}
});
}
</script>

最佳答案

首先,您的 if 语句不检查 noOfTiles 的值,它们设置它是因为您使用的是单个 =,它总是导致表达式的计算结果为 true:

 if (noOFTiles = 1) {

将其更改为比较运算符:

 if (noOFTiles == 1) {

或者,更好的是,如果不需要类型强制:

 if (noOFTiles === 1) {

其次,您通过测试 noOFTiles 错误地访问了 noOfTiles

第三,您正在使用两个单独的 if 语句,因此每个语句都会运行,因为第二个语句设置了 'height': tileHeightSquare + "px",那是你最终得到的那个。

你需要将两条语句修改为一条,像这样:

    if (noOfTiles == 1) {
$(this).children().css({
'width': tileWidth + 'px',
'height': tileHeightWide + 'px'
});
} else if (noOfTiles == 2) {
$(this).children().css({
'width': tileWidth + 'px',
'height': tileHeightSquare + 'px'
});
} else {
$(this).children().css({
'width': tileWidth + 'px',
'height': tileHeightBox + 'px'
});
}

此外,为了更好的设计,请遵循 DRY(不要重复自己)的最佳实践,这使得代码库更 slim ,更容易扩展并且更不容易出现错误:

    var h = tileHeightBox;

if (noOfTiles == 1) {
h = tileHeightWide;
} else if (noOfTiles == 2) {
h = tileHeightSquare;
}

$(this).children().css({
'width': tileWidth + 'px',
'height': h + 'px'
});

最后,页面中真的应该只有一个 main 元素,以保持语义的目的正确。您可能想要使用 section,如下所示:

$(flexTiles);

function flexTiles() {
$('.container').each(function() {

var noOfTiles = $(this).children().length; //no of tiles in each container
var containerWidth = $(this).innerWidth(); //main container width
var tileWidth = (containerWidth / noOfTiles);
var tileHeightBox = tileWidth;
var tileHeightSquare = tileWidth * 0.75;
var tileHeightWide = tileWidth * 0.5625;

var h = tileHeightBox;

// >>>> You had: noOFTiles, instead of noOfTiles <<<<
if(noOfTiles == 1) {
h = tileHeightWide;
} else if(noOfTiles == 2) {
h = tileHeightSquare;
}


$(this).children().css({
'width': tileWidth + 'px',
'height': h + 'px'
});
});
}
<style>
.container {
background-color:#FFF;
display:table;
box-sizing:border-box;
width:100%;
}
.tile {
background-color:silver;
display:table-cell;
vertical-align:middle;
text-align:center;
-moz-box-shadow: inset 0 0 0 3px #FFF;
-webkit-box-shadow: inset 0 0 0 3px #FFF;
box-shadow: inset 0 0 0 3px #FFF;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<section class="container">
<article class="tile">
<h1>A1</h1>
</article>

<article class="tile">
<h1>A2</h1>
</article>
</section>

<section class="container">
<article class="tile">
<h1>B1</h1>
</article>
<article class="tile">
<h1>B2</h1>
</article>
<article class="tile">
<h1>B3</h1>
</article>
</section>

<section class="container"></section>

关于jquery - 根据其容器子项的数量计算 <article> 高度(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com