gpt4 book ai didi

javascript - jQuery Accordion "heightStyle: fill",页面加载时显示设置为无

转载 作者:可可西里 更新时间:2023-11-01 14:50:50 25 4
gpt4 key购买 nike

我的世界

  • jQuery 1.9.1
  • jQuery UI 1.10.3,尽管我的 jsfiddle example使用 UI 1.9.2 并且似乎工作正常。

我的问题

在stackoverflow上有很多类似的问题,但我找不到合适的答案。基本上我有一个在页面加载时不显示的 jQuery Accordion ,它的显示可以更改为 block。通过 jQuery .toggle()方法。切换工作正常,但 heightStyle: "fill"没有适本地填充空间除非在加载页面时显示父 div,这是我不想要的。

我的解决方案尝试

  • 将脚本重新定位在文档末尾和 <head> 中部分。
  • 重新排列切换发生的顺序:有第二个元素,#map ,在 Accordion 打开的同时关闭,反之亦然。
  • 因为我不完全确定 Accordion 是否首先需要父容器,所以我尝试了几种方法:切换 #accordion div,它的父 div,以及两个 div。
  • 为了更好的衡量,我还尝试了 .accordion( "refresh" )方法,以及在父 div 和 #accordion 上都有一个可调整大小的容器.没有汤。
  • 父容器和 #accordion 的各种 CSS 定位.
  • 深入了解 jQuery.js。鉴于我对 javascript 的初步经验,这并没有持续多久。说真的,不得不查一下这个东西=== . :)

我的天,这很有趣

当切换按钮被点击隐藏 Accordion 并显示#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" );
});

最佳答案

这是一种廉价而厚颜无耻的 hack,但它确实有效。基本上父 div 的高度,#leftpanel,在页面加载时(这是 jQuery 分配 Accordion 的高度时)没有被正确计算,因为它的 display:none属性(property)。所以,在添加 Accordion 功能之前,我自己抓取高度并手动将其分配给 #accordion,这就像做梦一样:

$( "#menu" ).click(function() {
$( "#map" ).toggle( "slow" );
if ($( "#leftpanel" ).css("display") == "none") {
$(function() {
$( "#leftpanel").css("display", "block");
var accordHt = $( "#leftpanel" ).css( "height" );
$( "#accordion").css("height", accordHt);
$( "#accordion" ).accordion({
heightStyle: "fill",
collapsible: true
});
});
};
});

如果您想知道为什么使用“if”语句而不是直接分配属性,那是因为在屏幕上加载页面时显示了一个媒体查询,其中我有 #leftpanel宽度为 800 像素及以上。

继续, fiddle :http://jsfiddle.net/72rw2/

关于javascript - jQuery Accordion "heightStyle: fill",页面加载时显示设置为无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19526558/

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