我有以下代码可以使用,但在每个切换操作结束时会变得有点跳跃。
如果我切换段落会更顺畅吗?
我试图获得该段落,但我不知道该怎么做。
有人可以帮我吗?
提前致谢。
<head>
<style type="text/css">
body {width: 660px; margin: 0 auto; }
.toppara{
background-color: #FF9;
}
.morepara {
background-color: #fff;
display:none;
}
.togglebutn {
color: #900;
background-color: #FFF;
}
</style>
</head>
<body>
<div id="section1">
<div class="toppara"><p>Content 1.</p>
</div>
<div class="morepara">
<p>
Content 2.
</p>
</div>
<p class="togglebutn">
<a>Show/Hide</a>
</p>
</div><!-- section 1 -->
<!-- section 2 -->
<div id="section2">
<div class="toppara"><p>Content 3.</p>
</div>
<div class="morepara">
<p>
Content 4.
</p>
</div>
<p class="togglebutn">
<a>Show/Hide</a>
</p>
</div><!-- section 2 -->
<script language="javascript" type="text/javascript">
$(function() {
$('.togglebutn a').click(
function(){
var $parentpara = $(this).parent().prev();
$parentpara.toggle('slow');
});
});
</script>
答案 0 :(得分:5)
为了向下滑动工作,JQuery必须猜测元素的最终高度。当它出错时,你会在动画结束时看到一个跳跃,并允许元素找到它的自然高度。
您的问题是由p
标记上的边距引起的,该边距占用了JQuery原始估算中的空间,但在动画完成时会折叠。
解决方法是删除p
标记上的边距,尝试通过为.morepara div提供明确的高度,边框或一些顶部/底部填充来防止崩溃发生,尽管这两个选项有不良副作用。
答案 1 :(得分:0)
您可以使用.children('p')
来访问&lt; p&gt;来自&lt; div&gt;,但我建议您尝试使用.slideToggle('slow')
方法而不是.toggle
,仍将其应用于&lt; div&gt;元件。一般来说,它非常适合您期望的那种。
答案 2 :(得分:0)
我不确定是什么导致了抖动。我的猜测是当div的display属性从'none'变为'block'时,将段落拟合到div中会产生一种效果。我已经应用了stanch的建议,并提出了一个似乎工作得更好的工作示例。
<html>
<head>
<style type="text/css">
body {width: 660px; margin: 0 auto; }
.toppara{
background-color: #FF9;
}
.morepara {
background-color: #fff;
}
.togglebutn {
color: #900;
background-color: #FFF;
}
</style>
</head>
<body>
<div id="section1">
<div class="toppara">
<p>Content 1.</p>
</div>
<div class="morepara">
<p>
Content 2.
</p>
</div>
<p class="togglebutn">
<a>Show/Hide</a>
</p>
</div>
<div id="section2">
<div class="toppara">
<p>Content 3.</p>
</div>
<div class="morepara">
<p>
Content 4.
</p>
</div>
<p class="togglebutn">
<a>Show/Hide</a>
</p>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
$('document').ready( function (){
$('.morepara p').hide();
$('.togglebutn a').click(
function(){
var parentpara = $(this).parent().prev().children();
parentpara.toggle('normal');
}
);
});
</script>
</body>
</html>
答案 3 :(得分:0)
不确定你是否对此有了答案,但给予正在切换特定WIDTH的DIV实际上对我有用。检查FF&amp; IE 7-8