jQuery .animate()强制样式“overflow:hidden”

jQuery的.animate()强制风格overflow: hidden当触发时overflow: hidden ,与我的animation元素搞乱,因为我有另一个元素悬挂在外面的负面位置。 无论如何要避免这一点?

另一种方法是在css中声明元素为!important

例如。

 .somediv { overflow: visible !important; } 

这是源代码:

  if ( isElement && ( p === "height" || p === "width" ) ) { // Make sure that nothing sneaks out // Record all 3 overflow attributes because IE does not // change the overflow attribute when overflowX and // overflowY are set to the same value opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ]; ... ... ... } if ( opt.overflow != null ) { this.style.overflow = "hidden"; } 

你可以评论这个,如果你想,或者干脆用$('element').animate().css('overflow', 'visible'); 如先前所build议的

溢出被设置为隐藏的原因是,被animation的内容中的元素将被包含在元素中,同时被animation化。 例如,如果你减less一个元素的宽度,它的内容可能会试图拉长和“掉落”底部。

这在上面的源代码中通过注释来解释:

/ /确保没有什么偷偷摸摸的

希望能为你解释。

任何这些解决scheme为我工作,但我find了诀窍:

 $(myDiv).animate( { height: newHeight}, { duration: 500, queue: false, easing: 'easeOutExpo', step: function() { $(myDiv).css("overflow","visible"); } } ); 

在animation的每个步骤强制CSS。 希望能帮助到你。

你可以通过:

function(e){$('#something').css('overflowY', 'scroll');}

到.animate()选项参数,作为animation“完成”时运行的函数,如下所示:

 $('#something').animate({ width: '100px', height: '100px', overflowY: 'scroll !important' //doesn't work }, { duration: 500, queue: false, complete: function(e){$('#something').css('overflowY', 'scroll');} } ); 

当使用$('element').animate().css('overflow', 'visible'); 如果已经为元素指定了overflow-xoverflow-y ,则会导致问题。

在这些情况下,使用$('element').animate().css('overflow', ''); 它只是删除溢出属性,并保持overflow-xoverflow-y完好无损。

完美的“鹰”(2篇文章)。 如果我没有碰到你的答复,我会一直在寻找几个小时,我敢打赌。

“鹰”发表正确的方式去做这件事。

所有其他解决scheme只是黑客。 这是正确的方式(重申),这就是为什么他们给你所有的select使用“animation”类。

以下是一些可用的设置(从文档https://api.jquery.com/animate/ )。 当animation完成时,我需要“完整”设置来执行动作。

  duration (default: 400) easing (default: swing) queue (default: true) specialEasing step progress complete start done fail always 

这将使animation工作更容易,我将使用这种格式,无论是否需要,在将来的所有animation。

我的首选答案是使用$.Animation.prefilter 。 这是一个jsfiddle.net的例子。

设置预filter:

 jQuery.Animation.prefilter(function(element, properties, options) { if (options.overrideOverflow) { jQuery(element).css("overflow", options.overrideOverflow); } }); 

然后使用它

 $(myDiv).animate( { height: newHeight}, { duration: 500, overrideOverflow: "visible" // Replace "visible" with your desired overflow value } ); 

请注意,您不能使用选项名overflow因为jQuery在内部使用。

虽然这个function已经在jQuery中有一段时间了,但是看起来文档并不完整。 但草案文件是可用的 。

另请参阅https://github.com/jquery/api.jquery.com/issues/256