脚本控制自适应高度的缩短问题

 更新时间:2007年10月19日 22:27:45   作者:  
function vvheight() {
       var sideleft=document.getElementById("content-left").scrollHeight;
       var sideright=document.getElementById("content-right").scrollHeight;
       layoutHeight=Math.max(sideleft,sideright);
       document.getElementById("content-left").style.height=layoutHeight+"px";
       document.getElementById("content-right").style.height=layoutHeight+"px";
}

我想用脚本来控制自适应高度,我用上面的代码控制了左列和右列的自适应高度。
可是有的页面因为内容多被撑得挺长,有的页面内容少,用上面的代码不能缩短了!
我就是想在访问内容少的时候,内容还能再缩回来,代码应该怎么写呢?谢谢了!
复制代码 代码如下:

function vvheight() {
    var CL=document.getElementById("content-left");
    var CR=document.getElementById("content-right");
    while(parseInt(CL.scrollHeight)==parseInt(CL.style.height)){CL.style.height=parseInt(CL.style.height)-30+"px"}
    var sideleft=CL.scrollHeight;
    while(parseInt(CR.scrollHeight)==parseInt(CR.style.height)){CR.style.height=parseInt(CR.style.height)-30+"px"}
    var sideright=CR.scrollHeight;
    layoutHeight=Math.max(sideleft,sideright);
    CL.style.height=layoutHeight+"px";
    CR.style.height=layoutHeight+"px";
}

解答:
在IE和Opera里,DIV的style.overflowY的默认值是"auto",上面的代码不会有问题。

在Firefox和Safari里,DIV的style.overflowY的默认值是""(相当于"hidden"),所以你直接用上面代码的话,会出错。需要人为调整style.overflowY="auto"。

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

下面这个算法略有不同,你看哪一个效果更好(变化的瞬间人眼睛感觉到的闪烁更小)?

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

就是这几行代码:

复制代码 代码如下:

    while(CL.scrollHeight==CL.clientHeight){CL.style.height=CL.clientHeight-30+"px"} 
    var sideleft=CL.scrollHeight; 
    while(CR.scrollHeight==CR.clientHeight){CR.style.height=CR.clientHeight-30+"px"}

没有太多时间,就先随便讲一讲吧。如果感兴趣的人多,以后我可以开一些这样的专题,或者写到书里去。

元素的scrollHeight属性是微软在IE中首创的DHTML属性,并非W3C规范或技术推荐标准的内容,但是现在几乎所有的浏览器都在支持这个属性(这是因为W3C标准中并没有相应的替代方案——因此我通常不提“标准”二字,而总是说“兼容、可用”)。scrollHeight是元素在内部不出现纵向滚动条的情况下在页面上显示时将占据的高度(像素数)。
[attach]64076[/attach]

clientHeight也不是W3C规范的东西(事实上,很多有用的东西都与“标准”无关,但它们是事实上的标准)。clientHeight是元素在页面中显示时实际占据的高度(像素数)。
[attach]64077[/attach]

如果使元素内部不出现纵向滚动条(给元素足够多的空间,令其可以完整显示;或者将其纵向滚动条禁用,也就是将style.overflowY设为"hidden"),则scrollHeight==clientHeight。

在滚动条出现时,clientHeight < scrollHeight,元素未能在页面上完整显示,若要令其完整显示,则至少需要scrollHeight像素高度的空间。

也就是,元素内部出现纵向滚动条时,scrollHeight就是令元素得以完整显示的最小高度。

在上面第一个例子中,我不断缩短DIV的高度(每次缩短30像素),直到DIV内部滚动条出现,取此时的scrollHeight值。

在第二个例子中,我直接把DIV高度设为1像素,迫使其内部出现滚动条,取scrollHeight值。

在我的显示器上,两个例子没有明显的差别。你可以把显示器的刷新频率调到最低,看看哪一种方式在变化的瞬间闪烁更小,择优用之。

相关文章

  • JavaScript函数声明和函数表达式的区别

    JavaScript函数声明和函数表达式的区别

    这篇文章主要介绍了JavaScript函数声明和函数表达式的区别,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • js以对象为索引的关联数组

    js以对象为索引的关联数组

    在代码逻辑中更多的是用关联数组的方式。但即使是这样我们也很少使用对象类型作为键值对的键名。
    2010-07-07
  • uniapp中canvas绘制图片内容空白报错的原因及解决

    uniapp中canvas绘制图片内容空白报错的原因及解决

    最近有个需求就是要用canvas画个分享的海报,所以这里总结下,这篇文章主要给大家介绍了关于uniapp中canvas绘制图片内容空白报错的原因及解决方法,需要的朋友可以参考下
    2023-09-09
  • JavaScript手机振动API

    JavaScript手机振动API

    现代浏览器里提供的新的API越来越倾向于移动手机应用,这篇文章主要为大家详细介绍了JavaScript手机振动API的相关资料,需要的朋友可以参考下
    2016-06-06
  • JS 密码强度验证(兼容IE,火狐,谷歌)

    JS 密码强度验证(兼容IE,火狐,谷歌)

    仿JQuery中文社区注册,JS 密码强度验证(兼容IE,火狐,谷歌)
    2010-03-03
  • 直接拿来用的页面跳转进度条JS实现

    直接拿来用的页面跳转进度条JS实现

    这篇文章主要为大家分享了一款直接拿来用的页面跳转进度条,由javascript实现,可以直接跳转到相应页面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • 一文解析JavaScript模块构建的三种方式

    一文解析JavaScript模块构建的三种方式

    在现代Web开发中,JavaScript库的构建和打包是一个至关重要的环节,不同的构建方式可以影响到库的性能、可维护性和适用性,本文将深入剖析三种主要的JavaScript模块构建方式:CommonJS、ES模块和AMD,我们将深入探讨它们的工作原理、适用场景以及示例代码
    2023-08-08
  • 测试JavaScript字符串处理性能的代码

    测试JavaScript字符串处理性能的代码

    主要是测试了数组 push()方法与直接相加这两种在JS引擎上性能的实际处理情况。程序代码简单明了,没什么好解释的。
    2009-12-12
  • Javascript中Array用法实例分析

    Javascript中Array用法实例分析

    这篇文章主要介绍了Javascript中Array用法,实例分析了javascript中数组的遍历、传值、比较等常用技巧,需要的朋友可以参考下
    2015-06-06
  • 离开当前页面前使用js判断条件提示是否要离开页面

    离开当前页面前使用js判断条件提示是否要离开页面

    这篇文章主要介绍了离开当前页面前如何使用js判断条件提示是否要离开页面,需要的朋友可以参考下
    2014-05-05

最新评论