我正在尝试创建一个类似于博客功能的手风琴,首先你会看到一组行(确切地说是100px),当你点击博客标题时,博客文章会扩展到它的全部高度。
这是我到目前为止所做的:
HTML:
<ul class="blog">
<li class="list-item">
<div class="list-item-left">
<h2 class="expand">Project Eden</h2>
<time>07.08.2012</time>
</div>
<div class="list-item-right">
<p>"Sed ut perspiciatis unde </p>
</div>
<div class="list-item-whitespace"></div>
</li>
<li class="list-item">
<div class="list-item-left">
<h2>Project Eden</h2>
<time>07.08.2012</time>
</div>
<div class="list-item-right">
<p>"Sed ut perspiciatis unde</p>
</div>
<div class="list-item-whitespace"></div>
</li>
</ul>
jQuery:
var $listItems = $('.list-item');
var closedHeight = 100;
var slideSpeed = 1000;
$(".list-item").click(function() {
if($(".list-item:animated").length)
return false;
}).toggle(function() {
var openHeight = $(this).parents("div:first").find(".list-item-right").height();
$(this).animate({height:openHeight}, slideSpeed,"easeOutExpo");
$(this).children('.list-item-whitespace').css({'display':'none'});
}, function(){
$(this).animate({height:100}, slideSpeed,"easeOutExpo");
$(this).children('.list-item-whitespace').css({'display':'block'});
});
基本上我们正在做什么(根据我的理解,当涉及到jQuery时,我就是新手!):
我们在变量中存储了一些信息,然后我们定义了一个函数,它将.list-item扩展到.list-item-right的实际高度,当我们再次点击它时它将恢复为它的“封闭”高度为100px。
现在,我想要做的是在点击.list-item时没有.toggle事件或.click事件。
相反,我希望它仅在您单击.expand类或.list-item-left h2(如果愿意)时触发。
如果这对任何人都有意义,请告诉我我在哪里不知所措。
祝你好运, K.
答案 0 :(得分:1)
我就是这样做的。它需要重新调整你的html。您将列表项内容包含在父div中。您可以使用它来找出未溢出的高度。
展开列表项时,添加一个打开或关闭的类,以便了解状态。
我也摆脱了我想象的清理div并给出了容器div overflow: auto
,这使得包含的元素自我清晰。
//set all blog posts to 100px to start
$('li.list-item h2').click(function() {
$this = $(this);
var nheight = $this.closest('.naturalheight').height();
if ($this.hasClass('open')) {
$this.closest('li').animate({
height: 100
});
$this.removeClass('open');
}
else {
$this.closest('li').animate({
height: nheight
});
$this.addClass('open');
}
});