gpt4 book ai didi

javascript - 向下滑动div的 "height:auto"技巧是什么

转载 作者:行者123 更新时间:2023-11-30 06:06:21 25 4
gpt4 key购买 nike

我有一个显示简单

    项目列表的应用程序。当用户点击新的“类别”时,我想用 项目列表替换项目列表。

    我愿意接受额外的过渡建议,但我开始的是 --

    1. 缩小或滑动并移除现有的项目列表节点
    2. 动态地(Javascript DOM 方法)创建高度为 0 的新项目列表
    3. 将新列表附加到页面并将其展开或滑动

    我正在使用 Yahoo 的 YUI3 库,它还没有原生的“slideup”或“slidedown”方法,所以我正在模拟它们。我可以通过执行设置 height=0 的简单动画轻松地模拟“slideup”,但是我在模拟“slidedown”方法时遇到了麻烦,因为我不知道

      列表的最终高度(我正在动态构建).

      我希望高度合适 - 即:表现得像普通的 html - 这意味着我想要“height:auto”...但是 YUI3 无法将 CSS 属性从 height:0 动画化/转换为 height:auto .它需要一个浮点值。

      我研究了一些可以上下滑动 div 的 Javascript 库 (jQuery),并且似乎只是保存了高度的原始值——但那将是“自动”……这是行不通的。也许它先以某种方式计算实际高度?

      任何人都可以通过最好的方式来做到这一点吗?我是否需要在构建列表时手动计算高度...然后将其样式设置为高度:0,然后将其设置为计算高度的动画,然后将其样式设置为高度:自动以确保它是保持良好状态?如果是这样,那么跨浏览器的方法是什么?

      谢谢,-路德

最佳答案

我想这或多或少就是您要找的。诀窍是有两个嵌套的 div。外层控制实际高度,内层用于计算自然高度。动画结束后,如果展开,外部 div 将恢复为“自动”,以便您可以动态添加更多列表元素。

这是无耻地改编自 JQuery blog post .

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Animate to Auto</title>
<style type="text/css">
.inner {background:#ccc;height:auto;overflow:hidden;}
.inner ol{margin:0;}
.box{height:0px;overflow:hidden;}
</style> <script type="text/javascript" charset="utf-8"
src="http://yui.yahooapis.com/3.2.0/build/yui/yui-min.js">
</script>
</head>
<body>
<button class="btn">Toggle Height</button>
<div class="box">
<div class="inner">
<ol>
<li>Bashful</li>
<li>Doc</li>
<li>Dopey</li>
<li>Grumpy</li>
<li>Happy</li>
<li>Sleepy</li>
<li>Sneezy</li>
</ol>
</div>
</div>
OTHER STUFF HERE

<script>
YUI().use('node', 'event', 'anim', function(Y) {

var heightAnim = new Y.Anim({
node: Y.one('.box'),
to: {
height: 0
}
});

heightAnim.on('end', function (e) {
var box = heightAnim.get('node');
if (parseInt(box.getStyle('height')) > 0) {
box.setStyle('height', 'auto');
}
});

Y.one('.btn').on('click', function(e){
var box = this.get('node');
var inner = box.one('.inner');
var boxH = box.getStyle('height');
if (boxH === 'auto') {
box.setStyle('height',inner.getStyle('height'));
this.set('to', {height: 0});
this.run();
} else {
this.set('to', {height: parseInt(inner.getStyle('height'))});
this.run();
}
},heightAnim);

});
</script>
</body>
</html>

关于javascript - 向下滑动div的 "height:auto"技巧是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356930/

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