基本的jQuery slideUp和slideDown让我发疯!
我的jQuery技能通常很好,但这让我很生气!
这是一个相当简单的手风琴我从头开始编码。 使用jQuery 1.3.2所以不应该有任何跳跃错误,但基本上如果你看一下这个例子:
http://www.mizudesign.com/jquery/accordian/basic.html
我正在显示右侧目标div的高度 – 如果它包含文本,它认为它比它更短并且跳跃。 如果它是一个图像,没有问题。
我无法弄清楚我哪里出错 – 显然在CSS的某个地方,但我已经尝试了所有常见的嫌疑人,如display:block
任何想法都会感激不尽!
你的,克里斯
PS请原谅源代码的性质,我已经把我正在处理的整个项目撕掉了,所以它确实包含了一些不需要在那里的div。
您需要内容的宽度或高度才能平滑地制作动画。
我必须承认我现在已经找到了自己的动态解决方案。
http://www.mizudesign.com/jquery/accordian/basic.html应该修复。
它真的非常简单 – 只需在隐藏div之前使用.css添加高度。 有效的待遇:)
$("#PlayerButtonsContent div").each (function() { $(this).css("height", $(this).height()); }); $("#PlayerButtonsContent div").hide();
我认为问题是,当添加填充或边距然后它跳跃时,我就是这种情况。 你必须在回调中设置边距的动画
另外“请记住”表格使用slideDown slideUp表现错误,而是使用fadeIn fadeOut
div从回调中完成动画后获取高度。 你可能在div被动画时获得了高度,并且你获得了一个过渡值。
如果您的动画是跳跃的,请尝试使用回调。 不要打开div并同时隐藏div。 相反,隐藏你的第一个div,并在回调中显示你的下一个div。
$(".someDiv").slideUp("normal", function(){ /* This animation won't start until the first has finished */ $(".someOtherDiv").slideDown(); });
更新(来自评论):
redsquare: http : //jqueryfordesigners.com/slidedown-animation-jump-revisited/
我在Safari上也遇到了令人讨厌的slideUp()
跳转问题,但没有Chrome或IE。 事实certificate,我隐藏/显示的div标签位于另一个包含float:left
divs的div标签的正下方。 在向上滑动期间,浮动的div将暂时重新渲染,从而导致跳跃。
修复只是添加clear:both
隐藏/显示div的样式。
我的问题是,由于我有一个响应式设计,我不知道我的元素的宽度或高度是多少。 在阅读了这篇博客文章http://www.bennadel.com/blog/2263-Use-jQuery-s-SlideDown-With-Fixed-Width-Elements-To-Prevent-Jumping.htm后,我意识到jQuery正在改变立场我的元素修复和搞乱元素的布局。 我将以下内容添加到我的CSS元素中,并没有注意到IE7 +,firefox,chrome和safari中的任何不良副作用。
display: none; overflow: hidden; position: relative !important;
用padding-top和padding-bottom值替换margin-top和margin-bottom值对我来说是个窍门。 此后不要忘记将边距值设置为0。
这对我有用:
$(this).pathtoslidingelementhere.width($(this).parent().width());
问题是由于IE(怪癖模式)试图渲染“height:0px”。
修复:将高度设置为1(不为0),然后隐藏并重置高度:
// slideUp for all browsers $("div").animate({ height:1 },{ complete:function(){ // hide last pixel and reset height $(this).hide().css({ height:"" }); } });
对我来说,问题是使用幻灯片显示/隐藏div上的边距(或填充),但我需要为该div提供边距(或填充)。 我解决了这个伎俩:
.slide-div:before{ content: " "; display: block; margin-top: 15px; }