jQuery slideDown Snap Back Issue

感情迁移 提交于 2019-11-30 11:18:56

Have a look on fixes:
1. SlideDown Animation Jump Revisited
2. Fixing jQuery's slideDown() jump effect

Also that same glitch documented (with fix) on jQuery website: http://docs.jquery.com/Tutorials:Getting_Around_The_Minimum_Height_Glitch

And try to add following code before your code (on document onload):

$('.new').css('height', $('.new').height());
$('.new').hide();

This way you will set height explicitly, and be sure to display your div initially, the above code will hide it later, because I think it will fail to set right height to hidden div, though you can try. Good Luck~

I was having the snap-back-on-slide-down problem on an LI item I was adding to a UL. There was nothing fancy about it so I was finding it puzzling (and had seen this before, but didn't remember how I'd fixed it then).

In my case, the only fix I needed was do specify a width on my LI and was able to slideDown() and slideUp() smoothly.

e.g.

ul li { width: 100%; }

I got this tip from one of the links posted by @arman-p (which suggests adding a width to the element can fix this problem, which it did in my case).

Add css overflow: hidden to the element you want to slide down.

For some reason this fixed my snap-back problem.

EDIT: Things that confuse jquery about the height of an element will cause the snap-back issue.

  1. Padding will cause it. Put your padded content you want to slide down in a new parent div without padding, and instead slide that parent div down.
  2. Inline text that wraps due to width will cause it. Add white-space: pre or white-space: nowrap to solve it.

I was also getting that ugly snap back effect.

What fixed the snap back issue for me was to apply a css width to the div you are applying the slide function to.

Any of the solutions above didn't work for. I fixed the problem by adding the following styles to my container:

.clear:after {
   clear: both;
}

.clear:before,
.clear:after {
   display: table;
   content: "";
}

Another thing that could cause this is if you have a "transition" style on the element itself.

An example of what was happening to me

* {
     transition: .3s;
}

.dropdown {
     /* Fix - Remove Transition */
     transition: 0s;
}

Adding the CSS clear: both solved the problem for me, no idea why though.

Edit: Adding overflow: hidden gave me a blank container with the unwanted additional height.

I have a database loading images that are all set to the same width but some of them have different heights and was having a problem with this. What fixed it for me was just throwing a setTimeout around the slideDown portion of my code.

setTimeout(function(){$("#YOURDIV").slideDown("slow");}, 1);
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!