打印

[原创]带缓冲的 收缩与展开内容效果

吐血贡献.才出炉的一个效果...注释部分已经有很详细的使用方法.

兼容ie5.5+   firefox2.0(因为我只有这两个浏览器,所以只在它们中做了测试)

看到blueidea很多朋友都发了一些 收缩与展开内容的效果,唯一差的就是一个缓冲效果.不多说,运行一下就知道了,呵呵.

最大高度还需要固定数值.没有很好的解决方案.有兴趣的朋友帮忙解决一下拉,谢谢.
这个代码其他部分不会再发出更新和完善之后的了.如果需要封装就自己做做吧,呵呵.

放出代码为分享学习之用.请尊重别人的作品勿作商业用途!!!!!
复制内容到剪贴板
代码:
<html>
<head>
<script>
/*
By Auntion
QQ 82874972
欢迎喜欢javascript 和 ajax的朋友++我QQ,大家共同进步,呵呵
使用方法
调用效果: Effect(1,2);
  其中1为: 被改变对象的id
  其中2为: 控制容器的id  可在使用:  this.parentNode.id  取得(父标签的id)
注意给对象ID的时候一定不要重复.
*/
function $G(Read_Id) { return document.getElementById(Read_Id) }
function Effect(ObjectId,parentId){
    if ($G(ObjectId).style.display == 'none'){
    Start(ObjectId,'Opens');
    $G(parentId).innerHTML = "<a href=# onClick=javascript:Effect('"+ObjectId+"','"+parentId+"');>关闭</a>"
    }else{
    Start(ObjectId,'Close');
    $G(parentId).innerHTML = "<a href=# onClick=javascript:Effect('"+ObjectId+"','"+parentId+"');>打开</a>"
    }
}
function Start(ObjId,method){
var BoxHeight = $G(ObjId).offsetHeight;               //获取对象高度
var MinHeight = 5;                                    //定义对象最小高度
var MaxHeight = 130;                                 //定义对象最大高度
var BoxAddMax = 1;                                    //递增量初始值
var Every_Add = 0.15;                                //每次的递(减)增量  [数值越大速度越快]
var Reduce = (BoxAddMax - Every_Add);
var Add    = (BoxAddMax + Every_Add);
if (method == "Close"){
var Alter_Close = function(){                        //构建一个虚拟的[递减]循环
    BoxAddMax /= Reduce;
    BoxHeight -= BoxAddMax;
    if (BoxHeight <= MinHeight){
        $G(ObjId).style.display = "none";
        window.clearInterval(BoxAction);
    }
    else $G(ObjId).style.height = BoxHeight;
}
var BoxAction = window.setInterval(Alter_Close,1);
}
else if (method == "Opens"){
var Alter_Opens = function(){                        //构建一个虚拟的[递增]循环
    BoxAddMax *= Add;
    BoxHeight += BoxAddMax;
    if (BoxHeight >= MaxHeight){
        $G(ObjId).style.height = MaxHeight;
        window.clearInterval(BoxAction);
    }else{
    $G(ObjId).style.display= "block";
    $G(ObjId).style.height = BoxHeight;
    }
}
var BoxAction = window.setInterval(Alter_Opens,1);
}
}
</script>
<style>
body,div,table { font-size:12px;}
#control{ width:200; background-color:#ccc; font-size:12px; font-color:#333333; text-align:center; }
#control a { font-weight:900; line-height:30px; color:#333333; }
.test{ height:130;width:200;background-color:#ccc;display:block;overflow:hidden; }
.STYLE1 {
    font-size: 8px;
    color: #FFFFFF;
}
</style>
</head>
<body>
<div id="control">
  <table width="100%" height="30" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="100%" align="center" bgcolor="#2DD5FF" id="testtab"><a href="#" onClick="Effect('test',this.parentNode.id);">关闭</a></td>
    </tr>
  </table>
</div>
<div id="test" class="test">
  <table width="100%" height="130" border="0" cellpadding="4" cellspacing="0" bgcolor="#EEEEEE">
    <tr>
      <td colspan="3" align="center" valign="top">这<br>
        里<br>
        是<br>
        第<br>
        二<br>
        ,<br>
        很<br>
        正<br>
        常<br></td>
    </tr>
  </table>
</div>
<div id="control">
  <table width="100%" height="10" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="100%" align="center" valign="bottom" bgcolor="#00C0F0"><span class="STYLE1">▲</span></td>
    </tr>
  </table>
</div>
<br>
<div id="control">
  <table width="100%" height="30" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="100%" align="center" bgcolor="#2DD5FF" id="test1tab"><a href="#" onClick="Effect('test1',this.parentNode.id);">关闭</a></td>
    </tr>
  </table>
</div>
<div id="test1" class="test">
  <table width="100%" height="130" border="0" cellpadding="4" cellspacing="0" bgcolor="#EEEEEE">
    <tr>
      <td colspan="3" align="center" valign="top">这<br>
        里<br>
        是<br>
        第<br>
        一<br>
        ,<br>
        很<br>
        正<br>
        常<br></td>
    </tr>
  </table>
</div>
<div id="control">
  <table width="100%" height="10" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="100%" align="center" valign="bottom" bgcolor="#00C0F0"><span class="STYLE1">▲</span></td>
    </tr>
  </table>
</div>
</body>
</html>
两个都关闭的状态

 提示:您可以先修改部分代码再运行
一个打开一个关闭的状态

 提示:您可以先修改部分代码再运行
By Auntion
QQ 82874972
欢迎喜欢javascript 和 ajax的朋友++我QQ,大家共同进步,呵呵

[ 本帖最后由 Nicest 于 2006-12-5 22:10 编辑 ]
本帖最近评分记录
  • hutia 威望 +1 原创内容 2006-12-4 22:46
NewBlog: auntion.blogbus.com
顶,
如果去掉表格后更加完美~
你可以去掉表格完全用div,我只是用表格来布局并且表现出装内容的div可以装表格在里面并且良好的伸缩..呵呵

[ 本帖最后由 Nicest 于 2006-12-4 22:11 编辑 ]
NewBlog: auntion.blogbus.com

把原作品改造了一下



 提示:您可以先修改部分代码再运行

┏┯┓┏┯┓┏┯┓┏┯┓
┨┠┨┠┨┠
┗┷┛┗┷┛┗┷┛┗┷┛

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!

回复 #4 marvellous 的帖子

更有感觉了。厉害。

btw:你的用色真大胆。哈哈哈哈

TOP

marvellous.........用色真大胆...经常看到你的东西都是,真有趣,哈哈


问下marvellous
MaxHeight 那个变量你有很好的解决办法吗?我想了很久都没有办法解决.

因为他的值等于读取的div的高度.但是打开与关闭的时候div的高度会改变掉.我期望的是MaxHeight一直保持第一次获取的那个130的高度(这也是css里面定义的高度.)目前MaxHeight是赋予的一个固定值- -!

[ 本帖最后由 Nicest 于 2006-12-4 22:58 编辑 ]
NewBlog: auntion.blogbus.com

TOP

能否默认为关闭啊???

TOP

可以,自己小改一下就行了.
NewBlog: auntion.blogbus.com

TOP

不错,这个怎么做的呀 嘿嘿。。。
禁止“Senfe”回复“99999999999”的帖子!!

TOP

都是些高手啊!

TOP

这样的都可以加分的?
人有多大胆  地有多大产
没有做不到  只有想不到

TOP

关于高度问题。我想到一个方法。但是不完善。希望高手再加把力。给小弟更好的方法。现在效果如下:

 提示:您可以先修改部分代码再运行
------------------------------------------------------------------------------------------------
可以看我到去掉一个。这就是不完善的地方。具体我添加的在里面注明,思路就是在页面装载时
根据二个TABLE的顶坐标求出中间含字的TABLE高度就行了。但是我现在求一个可以。二个以上
就不行了。总不能写二个函数吧。呵呵。小弟现在头脑乱了。希望高手再修改。我冷静一下再想
想办法。呵呵。天太热了!!  

TOP

好东西先收藏
再置顶
When the door to happiness

TOP

关于最大高度我还得再想想看,呵呵
NewBlog: auntion.blogbus.com

TOP

如何控制开始时是否关闭
比如有两个
一个开,一个关
何解?
風淸楊

TOP

好料,实用,收了!顶!
无孔不入;无所不至;无所不为.

TOP

引用:
原帖由 ssp2100 于 2006-12-5 19:07 发表
如何控制开始时是否关闭
比如有两个
一个开,一个关
何解?
你改css样式就可以了啊.

楼主帖里面我已经加了一个打开一个关闭的状态了

[ 本帖最后由 Nicest 于 2006-12-5 22:11 编辑 ]
NewBlog: auntion.blogbus.com

TOP

西

TOP



 提示:您可以先修改部分代码再运行
修改了下去掉了TABLE

[ 本帖最后由 liu6089 于 2007-9-28 19:17 编辑 ]

TOP