jQuery – 将子元素放在其外部的Animate元素 – 闪烁

原谅我,如果之前已经解决了,找不到任何东西。

我正在制作一个内容栏,其中包含绝对位于其外部的子项(通过负边距)。 这个想法是孩子们会随着它的扩展而使用吧。

一旦动画开始,孩子们就会消失,然后在动画完成时重新出现,会发生什么。 就好像动画需要在浏览器知道放置孩子的位置之前完成。

我在这里上传了一个非常简单的示例,所有脚本都包含在页面中: http : //www.ismailshallis.com/jdemo/

实际发生了什么? 我可以选择解决这个问题吗?

提前谢谢了,

贝琳达

当jquery为元素的高度或宽度设置动画时,它会自动设置overflow: hidden在动画发生时overflow: hidden在元素上。 由于您的子元素位于外部,因此技术上是溢出的一部分。 jquery源代码附近的代码中的注释表示“//确保没有任何东西偷偷摸摸。” 如果包含未压缩的jquery源并注释掉jquery-1.3.2.js的第4032行(在animate函数内):

 //this.style.overflow = "hidden"; 

您将看到动画按照您的预期方式工作。 我不确定除了通过注释掉上面的那行来修改jquery源之外的解决方法。

从jQuery 1.4.3开始,还有另一种不需要修改jQuery的解决方案。 如果在开始动画之前将动画元素的“溢出”样式设置为内联样式,则jQuery不会将“溢出”样式设置为隐藏。 例如:

  

好吧 – 它似乎是浏览器或jQuery的function,不一定是你构建HTML或Javascript的方式。 我这样说是因为看起来只有DOM元素边界框内的像素区域才会被渲染(尝试移动文本,使文本的一半在外面,一半在内…你看到一个“切断”的部分文本,因为它动画。)

所以这是解决方法:它使用围绕“#box”和“#outside”的包装器DIV,使得两者都在包装器的边界框内。

CSS:

  #boxWrapper { position: fixed; top: 50%; left: 50%; width: 200px; height: 200px; margin-left: -100px; margin-top: -120px; /* extra 20px for the #outside */ background:#ccc; } #box { background: #000; height:100%; width:100%; margin-top:20px; /* give 20px for the #outside */ } #outside { background:darkblue; position: absolute; top: 0px; right: 0; } 

和HTML:

 
CLICK ME
I'm positioned OUTSIDE the box

和Javascript:

  

或者,您可以使用!important规范指明元素保持visible的首选项。

 #box { overflow: visible !important; }