gpt4 book ai didi

jQuery动态改变元素高度

转载 作者:行者123 更新时间:2023-12-03 22:25:20 26 4
gpt4 key购买 nike

我正在开发一个流体布局项目。我的文档中有一些固定高度的 DIV,并且它们的高度都不同。我需要在浏览器调整大小时按比例更改这些 DIV 高度。这是标记。

<body>
<div id="a" class="target"></div>
<div id="b" class="target"></div>
<div id="c" class="target"></div>
</body>

和CSS:

<style>
body { width: 90%; margin: 0 auto;}
.target { width:30%; float:left; margin:1.6%; cursor:pointer; }
#a { height: 200px; background-color: yellow;}
#b { height: 400px; background-color: green;}
#c { height: 600px; background-color: grey;}
</style>

听起来很简单!主要条件是我不知道目标 DIV 及其 ID 的精确数量,这就是我使用 .each(function()) 的原因。这是我写的脚本:

$(document).ready(function(){
//set the initial body width
var originalWidth = 1000;
/*I need to go through all target divs because i don't know
how many divs are here and what are their initial height*/
$(".target").each(function()
{
//get the initial height of every div
var originalHeight = $(this).height();
//get the new body width
var bodyWidth = $("body").width();
//get the difference in width, needed for hight calculation
var widthDiff = bodyWidth - originalWidth;
//new hight based on initial div height
var newHeight = originalHeight + (widthDiff / 10);
//sets the different height for every needed div
$(this).css("height", newHeight);
});

});

当用户重新加载页面时,该脚本完美运行。当用户调整浏览器大小而不重新加载时,如何动态地获得相同的结果?我知道我应该应用 $(window).resize 事件监听器。但问题是,DIV 的初始高度将在事件内部计算,结果将几乎像无限循环 - 即最终高度会大幅增加或减少。我不需要那个!如何在事件函数外部进行 each DIV 初始高度计算,然后在事件函数内部使用这些高度?或者可能有另一种方法可以得到相同的结果?

最佳答案

您需要存储每个div的原始高度。有不同的方法可以做到这一点,这里有一个技巧,将其存储在 DOM 节点本身中(有更好的方法,但这既快速又肮脏)。

$(document).ready(function(){
//set the initial body width
var originalWidth = 1000;
/*I need to go through all target divs because i don't know
how many divs are here and what are their initial height*/


function resize() {
//This will only set this._originalHeight once
this._originalHeight = this._originalHeight || $(this).height();
//get the new body width
var bodyWidth = $("body").width();
//get the difference in width, needed for hight calculation
var widthDiff = bodyWidth - originalWidth;
//new hight based on initial div height
var newHeight = this._originalHeight + (widthDiff / 10);
//sets the different height for every needed div
$(this).css("height", newHeight);

}

$(".target").each(resize);
$(document).resize(function(){
$(".target").each(resize);
});
});

关于jQuery动态改变元素高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065626/

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