jQuery动态改变元素高度

2023-11-21

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

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

And 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 的初始高度将在事件内部计算,结果几乎就像无限循环 - 即最终高度会大幅增加或减少。我不需要那个! 我怎样才能使eachDIV 初始高度在事件函数外部计算,然后在事件函数内部使用这些高度?或者可能有另一种方法可以得到相同的结果?


您需要存储每个 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);
  });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery动态改变元素高度 的相关文章

随机推荐

  • force_ssl 在 Rails 中做什么?

    在之前的一个question我发现我应该设置 nginx ssl 终止并且不让 Rails 处理加密数据 那么为什么会出现下面的情况呢 config force ssl true 我在生产配置文件中看到这一点被注释掉了 但是 如果期望 ng
  • PyInstaller 打包的应用程序在控制台模式下工作正常,在窗口模式下崩溃

    我正在使用 Python 和 PySide 构建一个相当复杂的应用程序 发布的日子终于临近了 所以我想将此应用程序构建为 exe 然而 我手上有一个奇怪的问题 我过去使用过 PyInstaller 顺便说一下 使用版本 2 但从未发生过这种
  • 如何以编程方式编译和实例化 Java 类?

    我将类名存储在属性文件中 我知道类存储将实现 IDynamicLoad 如何动态实例化该类 现在我有 Properties foo new Properties foo load new FileInputStream new File C
  • 在 Subversion 中替换整个目录树的最佳方法?

    在我的 Subversion 项目中 我有一些目录 其中包含我的代码所需的其他开源项目 例如 ffmpeg freetype matrixssl 和其他一些 更新 SVN 以保存这些项目之一的最新版本的最佳方法是什么 本质上我将执行以下操作
  • 什么机制允许 ViM 暂时覆盖整个控制台?

    当你进入vim 它 清除 屏幕 退出后 它会 恢复 原始内容 我知道可以使用 x1b 2J清除控制台并重置光标位置 但这将覆盖终端内容 我假设 Vim 使用ncurses在幕后 我想更好的问题是 ncurses 如何做到这一点 但它是如何完
  • 当 UAC 被拒绝时 Process.Start 永远不会返回

    我有一个更新程序 exe 旨在关闭主 exe 将其替换为更新的 exe 然后启动该更新的 exe 当更新程序尝试启动更新的 exe 时 如果用户拒绝 UAC 权限对话框 更新程序将挂起 这是因为Process Start 函数永远不会返回
  • mongodb $regex 中排序规则的使用

    由于 v3 4 排序规则可用于查找操作 尤其是在涉及变音符号匹配时 虽然具有确定值 eq 运算符或相应构造 的查找查询将匹配字母和相应的变音符号 但如果使用 regex 来实现部分搜索字符串 LIKE 的匹配 则情况并非如此 是否可以使 r
  • 解决 MSB3247 - 发现同一依赖程序集的不同版本之间存在冲突

    使用 msbuild 编译时 NET 3 5 解决方案最终出现此警告 有时 NDepend 可能会有所帮助 但在这种情况下 它没有提供任何进一步的详细信息 Like Bob我最终不得不在 ILDASM 中打开每个程序集 直到找到引用旧版本依
  • 在文本文件中查找特定单词并对其进行计数

    有人可以帮我写代码吗 如何在文本文件中搜索任何单词并计算其重复次数 例如测试 txt hi hola hey hi bye hoola hi 如果我想知道 test txt 中单词 Hi 重复了多少次 程序必须说 3次重复 希望您能明白我的
  • 在 Java 中编写布尔表达式的首选方法是什么

    我总是这样写布尔表达式 if isValid code 但我的新雇主坚持以下风格 if false isValid code 是首选一种样式还是标准样式 我更喜欢第一种风格 因为它对我来说阅读起来更自然 第二种风格很不寻常 有些人可能更喜欢
  • 为什么Python中的破折号写成'\xe2\x80\x93'?

    具体来说 每个转义是什么 xe2 x80 x93为什么需要 3 次转义 尝试单独解码会导致 数据意外结束 错误 gt gt gt print b xe2 x80 x93 decode utf 8 gt gt gt print b xe2 d
  • 如何实现无锁但阻塞的行为?

    我正在为密集型网络应用程序实现一个无锁的单生产者单消费者队列 我有一堆工作线程在它们自己的单独队列中接收工作 然后它们将其出队并进行处理 去掉这些队列的锁 大大提高了高负载下的性能 但当队列为空时它们不再阻塞 进而导致CPU使用率飙升 如何
  • 如何在Java中创建进程[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想在我的应用程序中创建一个流程 但在查看了 Java 的 API 后 我仍然不太明白 基本上我想创建一个多进程应用程序 但新流程是我的应用程序中的
  • C++:参数传递“通过引用传递”

    我理解与任何其他变量一样 参数的类型决定了参数与其参数之间的交互 我的问题是 为什么您会引用参数 而为什么不引用参数背后的原因是什么 为什么有些函数参数可以引用 有些则不能 无法理解这样做的好处 有人可以解释一下吗 通过引用传递的能力存在有
  • Windows 桌面应用程序的使用情况跟踪[关闭]

    Closed 这个问题是无关 目前不接受答案 我正在寻找一些可用于收集 Windows 桌面应用程序的使用信息并对其进行分析的框架 例如 我希望能够回答以下问题 a 人们一天内使用此应用程序多少次 b 他们最喜欢的菜单项等 我简单地浏览了
  • 如何在终端中更改我的 Git 用户名?

    我在终端中从 git 进行推送和拉取 然后在 github com 上更改了我的用户名 我去推送一些更改 但它无法推送 因为它仍然识别我的旧用户名 如何在终端中的 git 上更改 更新我的用户名 在您的终端中 导航到您想要进行更改的存储库
  • 跟踪 YouTube 观看历史记录

    为了自动跟踪我的时间 我想获取我的观看历史记录 最好的情况 每天一次 最坏的情况是每分钟一次 并将其添加为 Google 日历事件 虽然我成功添加了 Google 日历活动 但无法获取 YouTube 观看历史记录 所以我想知道 v3 AP
  • 捕获动态添加到 Jquery Datatables 表的输入字段上的更改事件

    我有一个 ajax 调用 它使用以下代码为响应中的每条记录添加一些行到数据表中 strAppName data Application Name maintCost
  • Eclipse:这些 JSP 错误是什么?

    我继承了一个 Web 应用程序 当在 Eclipse 中设置它时 它显示特定 JSP 中的错误 这些错误在 Problems 视图中没有与之相关的描述 单击它们会将我带到 JSP 的顶部 其中红色错误下划线出现在字符串的中间 如下所示 想象
  • jQuery动态改变元素高度

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