我的世界
- jQuery 1.9.1
- jQuery UI 1.10.3,尽管我的 jsfiddle示例 使用的是UI 1.9.2,似乎可以正常工作。
我的问题
stackoverflow上有许多类似的问题,但我无法找到合适的答案。基本上,我有一个jQuery手风琴,在页面加载时不显示,可以通过jQuery的.toggle()
方法将其显示为block
。切换效果很好,但是heightStyle:“fill”
不能适当地填充空间,除非在加载页面时显示父div,这是我不想要的。
解决方案尝试
- 将脚本重新定位到文档末尾和部分。
- 重新排列切换发生的顺序:还有第二个元素
#map
,与手风琴同时切换关闭,反之亦然。 - 因为我不确定手风琴是否首先需要父容器,所以我尝试了几种方法:切换
#accordion
div,它的父div和两个div。 - 为了保险起见,我还尝试了
.accordion(“refresh”)
方法,并在父div和#accordion
上具有可调整大小的容器。什么都不行。 - 父容器和
#accordion
的各种CSS定位。 - 深入jQuery.js中进行修改。考虑到我对JavaScript的经验有限,这不会持续太久。说真的,我得查一下这个“ === ”是什么。 :)
真有趣
当单击切换按钮以隐藏手风琴并再次显示#map
时,可以看到heightStyle:“fill”
实际上可以工作一秒钟!我在jsfiddle中减缓了转换持续时间,以便更容易地查看。
因此,无论如何启用正确的高度计算heightStyle:“fill”
,我都需要始终发生这种情况。任何建议都将不胜感激!
js fiddle: http://jsfiddle.net/Y8B4W/1/
HTML
<div>
<div class="page-header">
<div id="menu">Menu</div>
</div>
<div id="leftpanel">
<div id="accordion">
<h3>Heading 1</h3>
<div>
<p>...</p>
</div>
<!-- ...repeat for three more headings/sections... -->
</div><!--accordion-->
</div><!-- #leftpanel -->
<div id="map"></div>
</div>
CSS
body {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
color: #000;
}
.page-header {
width: 100%;
height: 3em;
background: gray;
}
#menu {
font-size: 1em;
margin: 0.5em;
font-weight: bold;
cursor: pointer;
}
#leftpanel {
display: none;
background: blue;
padding: 0;
margin: 0;
position: absolute;
top: 3em;
left: 0;
bottom: 0;
width: 100%;
}
#map {
position: absolute;
bottom: 0;
top: 3em;
width: 100%;
background: yellow;
line-height: 1.5em;
}
Javascript
$( "#accordion" ).accordion({
heightStyle: "fill",
collapsible: true
});
$( "#menu" ).click(function() {
$( "#map" ).toggle({
duration: 2000
});
$( "#leftpanel" ).toggle({
duration: 2000
});
$( "#accordion" ).accordion( "refresh" );
});