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-x
和overflow-y
,则会导致问题。
在这些情况下,使用$('element').animate().css('overflow', '');
它只是删除溢出属性,并保持overflow-x
和overflow-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中有一段时间了,但是看起来文档并不完整。 但草案文件是可用的 。