gpt4 book ai didi

jquery - 复杂的 Webkit 错误?相对位置 + Z-Index + 溢出隐藏 + CSS3 变换

转载 作者:太空狗 更新时间:2023-10-29 14:18:09 28 4
gpt4 key购买 nike

与其他现代浏览器相比,下面的代码 ( JSFiddle Preview ) 在 Webkit 中产生了意想不到的结果:

<script type="text/javascript">
jQuery(document).ready(function($) {
RunFunction();

$('.ColorSquare').click(function() {
$('#Lightbox').css('display','block');
$('#ShowColorSquare').css('display','block');
$('#ShowColorSquare').css('z-index','10');
$('#ShowColorSquare').css('left',$('#ShowColorSquare').parent().width() / 2 - 50);
$('#ShowColorSquare').css('top',$('#ShowColorSquare').parent().height() / 2 - 50);
$('#ShowColorSquare').html('The color is: ' + $(this).css('background-color'));
});
$('#ShowColorSquare').click(function() {
$('#Lightbox').css('display','none');
$('#ShowColorSquare').css('display','none');
$('#ShowColorSquare').html('');
});
$('#Lightbox').click(function() {
$('#Lightbox').css('display','none');
$('#ShowColorSquare').css('display','none');
$('#ShowColorSquare').html('');
});
});
function RunFunction() {
$('#slide1').animate({
left: '-=310'
}, 3000);
$('#slide2').animate({
left: '-=310'
}, 3000);
$('#slide3').animate({
left: '-=310'
}, 3000, function() {
if($('#slide1').css("left") == '-310px') {
$('#slide1').css("left",620);
}
if($('#slide2').css("left") == '-310px') {
$('#slide2').css("left",620);
}
if($('#slide3').css("left") == '-310px') {
$('#slide3').css("left",620);
}
RunFunction();
});
}
</script>
<style>
#Spin {
width:50px;
height:50px;
margin: 15px 0px 15px 15px;
background-color:#960;
animation-name:Spin;
animation-duration:5s;
transform-origin:50% 50%;
animation-iteration-count:infinite;

-webkit-animation-name:Spin;
-webkit-animation-duration:5s;
-webkit-transform-origin:50% 50%;
-webkit-animation-iteration-count:infinite;
}
@keyframes Spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@-webkit-keyframes Spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
.ColorSquare {
height:100px;
width:100px;
position:absolute;
}
#ShowColorSquare {
height:100px;
width:100px;
position:absolute;
background-color:white;
display:none;
}
#Lightbox {
background-color:#000;
width:100%;
height:100%;
position:fixed;
top:0px;
left:0px;
opacity:.8;
display:none;
z-index:5;
}
.Panel {
width:225px;
height:250px;
position:absolute;
background-color:#6C6C6C;
}
</style>

<div id="Spin"></div>

<div style="height:260px;width:500px;overflow-x:hidden;background:#CCC;">
<div style="height:250px;width:500px;position:relative;">
<div id="slide1" class="Panel" style="top:0px;left:0px;">
<div>Slide 1</div>
<div style="position:relative;margin-top:10px;width:225px;height:200px;">
<div class="ColorSquare" style="background-color:#093;left:0px;top:0px;"></div>
<div class="ColorSquare" style="background-color:#C9F;left:100px;top:100px;"></div>
</div>
</div>
<div id="slide2" class="Panel" style="top:0px;left:310px;">
<div>Slide 2</div>
<div style="position:relative;margin-top:10px;width:225px;height:200px;">
<div class="ColorSquare" style="background-color:#CF9;left:0px;top:0px;"></div>
<div class="ColorSquare" style="background-color:#C63;left:100px;top:100px;"></div>
</div>
</div>
<div id="slide3" class="Panel" style="top:0px;left:620px;">
<div>Slide 3</div>
<div style="position:relative;margin-top:10px;width:225px;height:200px;">
<div class="ColorSquare" style="background-color:#696;left:0px;top:0px;"></div>
<div class="ColorSquare" style="background-color:#F96;left:100px;top:100px;"></div>
</div>
</div>
<div id="ShowColorSquare"></div>
</div>
</div>
<div id="Lightbox"></div>

预期结果:它应该有 3 个 DIV(幻灯片)在一个循环中连续向左动画,包括幻灯片中的相关彩色框。如果您单击一个彩色框,则会显示一个灯箱,其中包含在相关幻灯片中单击的彩色框的 RBG 颜色。再次单击以关闭灯箱。同时在浅灰色父 DIV 之前应用 3D 转换,相对位置 overflow hidden ,Jquery 在绝对定位幻灯片 DIV 上设置动画。

Webkit 中的结果:幻灯片中的彩色框似乎根本不会移动/呈现,直到您在桌面上调整浏览器窗口的大小,或在平板电脑上单击 JSFiddle 面板调整大小 handle (或捏/缩放)。在不同的调试说明中,如果 3D 转换动画没有循环,当动画停止时,DIV 会按预期呈现。

显示 Webkit 错误的测试结果:

  • Win7 IE10:通过
  • Win7 Chrome:通过
  • Win7 FF:通过
  • Win7 Safari:失败
  • Win8 IE11:通过
  • Android Chrome:失败
  • iOS Safari:失败
  • iOS Chrome:失败
  • MacOS Safari:失败
  • MacOS Chrome:失败

注意 ( JSFiddle Preview ) 在没有 3D 变换的情况下,代码可以工作,尽管动画在桌面上不流畅。灯箱工作正常。

请注意 ( JSFiddle Preview ) 在父 DIV 之后进行 3D 变换,动画很流畅,灯箱工作正常。

注意 ( JSFiddle Preview ) -webkit-transform: rotate(0deg) 应用到父 DIV 并溢出,动画在平板电脑上不稳定,但 3D 变换可以存在于父 DIV 或在幻灯片 DIV 中。但是又产生了另一个问题。父溢出 DIV 的 z-index 低于灯箱,使深色灯箱 DIV 出现在父 DIV 内的白色对话框 DIV 上方。

我知道这是一个非常奇怪的例子,但它是一个更私密的复杂代码的淡化例子。 3D 变换必须在父 DIV 之前,或在幻灯片中。灯箱对话框必须在父 DIV 或幻灯片中,但出现在深色灯箱 DIV 上方,不能在父 DIV 内,因为隐藏的溢出不会使深色灯箱 DIV 显示整个浏览器屏幕。

感谢任何帮助。

最佳答案

如果您阅读了 Chrome 中的 GPU 加速合成 http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome你会发现 renderLayer 在以下情况下会获得它自己的合成层:

  1. 图层具有 3D 或透视变换 CSS 属性
  2. 图层由使用加速视频解码的视频元素使用
  3. 图层由具有 3D 或 2D 上下文的 Canvas 元素使用
  4. 图层使用 CSS 动画实现不透明度,或使用动画 webkit 转换
  5. Layer 有一个有合成层的后代
  6. Layer 有一个 z-index 较低的兄弟层,它有一个合成层(换句话说,该层在合成层之上呈现)

当您添加或删除 3D 变换时,您会得到不同的结果,因为代码要么通过 GPU 加速路径,要么通过软件渲染路径。 GPU 加速路径对您拥有的 GPU/驱动程序非常敏感,如果您看到任何奇怪的图形故障,您应该检查的第一件事是当您在 chrome://中关闭硬件加速时它们是否仍然存在旗帜/

这三个示例都适用于 Chrome OSX,因此这很可能是特定显卡的浏览器错误。如果你能找到一个基本案例,我会建议用你的 GPU 信息将这个错误报告给 Chromium 元素。

关于jquery - 复杂的 Webkit 错误?相对位置 + Z-Index + 溢出隐藏 + CSS3 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17949782/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com