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

时间:2010-07-29 13:37:04

标签: jquery css

jQuery的.animate()在触发时强制样式overflow: hidden,弄乱我的动画元素,因为我有另一个悬挂的元素,负面位置,在它之外。无论如何要避免这种情况?

7 个答案:

答案 0 :(得分:49)

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

例如。

.somediv {
  overflow: visible !important;
}

答案 1 :(得分:28)

这是源代码:

  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');

将溢出设置为隐藏的原因是,动画中的元素将在动画中包含在元素中。例如,如果减少元素的宽度,其内容可能会尝试拉长并从底部“掉落”。

在上面的源代码中通过注释解释了这一点:

  

//确保没有任何东西偷偷溜走

希望能为您解释。

答案 2 :(得分:11)

任何这些解决方案都适合我,但我找到了诀窍:

$(myDiv).animate(
   { height: newHeight},
   { duration: 500, 
     queue: false, 
     easing: 'easeOutExpo', 

     step: function() {
       $(myDiv).css("overflow","visible");
     }
   }
);

在动画的每一步中强制使用css。希望它有所帮助。

答案 3 :(得分:3)

使用$('element').animate().css('overflow', 'visible');时,如果已为该元素指定overflow-xoverflow-y,则可能会出现问题。

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

答案 4 :(得分:2)

你可以通过:

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

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

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

答案 5 :(得分:0)

PERFECT“Eagle”(2篇帖子)。如果我没有碰到你的回复,我会一直在寻找我打赌的时间。

“鹰”发表了正确的解决方法。

所有其他解决方案都只是黑客攻击。这是正确的方法(重申),这就是为什么他们在使用“animate”类时会给你所有选项。

以下是一些可用的设置(来自文档https://api.jquery.com/animate/)。我需要“完整”设置来在动画结束时执行操作。

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

这将使动画的处理变得更加容易,无论是否需要,我将使用这种格式,对于将来的所有动画。

答案 6 :(得分:0)

我的首选答案是使用$.Animation.prefilterHere is a jsfiddle.net example.

设置预过滤器:

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在内部使用它。

虽然这个功能已经在jQuery中存在了一段时间,但似乎文档并不完整。但是draft documentation is available

另见https://github.com/jquery/api.jquery.com/issues/256