【发布时间】:2019-09-03 15:06:36
【问题描述】:
动画 正在应用的动画是一个 CSS“模糊”,它应该在向下滚动时模糊元素,然后在向上滚动时将其重新聚焦。
示例 #1 - 有效! HTML 和 CSS 是相同的。 jQuery 稍有不同,因为它针对的是父元素而不是子元素。 (适用于 FF 和 Chrome)
示例 2 - 不起作用! HTML 和 CSS 是相同的。 jQuery 稍有不同,因为它针对的是子元素而不是父元素。 (适用于 FF 但不适用于 Chrome)
发生了什么? 在第一种情况下,jQuery 使用 BLUR 动画定位父级,并且正如预期的那样,在滚动时模糊和取消模糊。
怎么了? 在第二个示例中,除了不是针对父级之外,所有内容都相同,我想仅模糊字母“S”并单独保留“T”。
如您所见,在第一种情况下工作的相同模糊样式类也适用于第二种情况。但是 - 当样式应用于第二种情况时,它们实际上并没有影响元素。没有模糊,没有边界(我添加用于测试)。
有人知道为什么这个动画会在父元素上起作用,影响子元素,但在针对特定子元素时不起作用?
谢谢!
示例 1(有效)
jQuery(document).ready(function($) {
// Smooth OUT
$('#smooth-logo').waypoint(function(direction) {
if (direction === 'down') {
$('#smooth-logo').addClass('swirl-in-fwd');
$('#smooth-logo').removeClass('swirl-in-bkw');
} else if (direction === 'up') {
$('#smooth-logo').addClass('swirl-in-bkw');
$('#smooth-logo').removeClass('swirl-in-fwd');
}
},
{ offset: '0%' });
});
.header {
min-height: 2000px;
position: relative;
}
#smooth-logo {
position: fixed;
}
/* SCROLLING ANIMATIONS */
.swirl-in-fwd {
animation: text-blur-out 1.2s cubic-bezier(0.550, 0.085, 0.680, 0.530) both;
border: 1px solid red;
}
.swirl-in-bkw {
animation: text-blur-in 1.2s cubic-bezier(0.550, 0.085, 0.680, 0.530) both;
border: 1px solid blue;
}
/* SCROLLING ANIMATIONS */
@keyframes text-blur-out {
0% {
-webkit-filter: blur(0.01);
filter: blur(0.01);
}
100% {
-webkit-filter: blur(12px) opacity(0%);
filter: blur(12px) opacity(0%);
}
}
@keyframes text-blur-in {
0% {
-webkit-filter: blur(12px) opacity(0%);
filter: blur(12px) opacity(0%);
}
100% {
-webkit-filter: blur(0.01);
filter: blur(0.01);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
<script src="../custom.js"></script>
<link href="smooth.css" rel="stylesheet" type="text/css">
<header class="header">
<div id="smooth-logo">
<svg data-name="big-s" xmlns="http://www.w3.org/2000/svg" width="10in" height="2in" viewBox="0 0 2036.7197 612">
<title>Stable Smooth Logo</title>
<!-- BIG S -->
<path id="bigS" class="" d="M362.2168,367.2317c23.8106,16.6907,51.0516,32.82,83.83,32.82,32.1888,0,56.8072-10.392,56.8072-33.4934,0-22.7209-10.6044-34.0863-70.4407-43.93-59.8364-10.6044-89.757-33.7058-89.757-78.3966,0-46.9588,39.96-79.6635,99.4161-79.6635,36.6579,0,63.8458,7.9425,97.4489,28.7153l-18.0235,37.88c-33.9085-17.7179-47.9607-24.0272-78.4851-24.0272-30.6717,0-49.227,14.75-49.227,35.9591,0,19.3162,10.6044,28.7841,67.4117,38.6325,65.1385,10.98,93.5422,35.2179,93.5422,81.8012,0,49.6124-39.7691,83.9606-109.8293,83.9606-38.3944,0-79.8883-17.5373-102.94-38.04Z"/>
<!-- BIG T -->
<polygon id="bigS1" class="" points="682.881 444.996 682.881 215.385 581.132 215.385 602.355 171.38 842.615 171.38 821.253 215.385 731.83 215.385 731.83 444.996 682.881 444.996"/>
</svg>
</div>
</header>
示例 2(即使样式已应用于元素也不起作用)
jQuery(document).ready(function($) {
// Smooth OUT
$('#smooth-logo').waypoint(function(direction) {
if (direction === 'down') {
$('#bigS').addClass('swirl-in-fwd');
$('#bigS').removeClass('swirl-in-bkw');
} else if (direction === 'up') {
$('#bigS').addClass('swirl-in-bkw');
$('#bigS').removeClass('swirl-in-fwd');
}
},
{ offset: '0%' });
});
.header {
min-height: 2000px;
position: relative;
}
#smooth-logo {
position: fixed;
}
/* SCROLLING ANIMATIONS */
.swirl-in-fwd {
animation: text-blur-out 1.2s cubic-bezier(0.550, 0.085, 0.680, 0.530) both;
border: 1px solid red;
}
.swirl-in-bkw {
animation: text-blur-in 1.2s cubic-bezier(0.550, 0.085, 0.680, 0.530) both;
border: 1px solid blue;
}
/* SCROLLING ANIMATIONS */
@keyframes text-blur-out {
0% {
-webkit-filter: blur(0.01);
filter: blur(0.01);
}
100% {
-webkit-filter: blur(12px) opacity(0%);
filter: blur(12px) opacity(0%);
}
}
@keyframes text-blur-in {
0% {
-webkit-filter: blur(12px) opacity(0%);
filter: blur(12px) opacity(0%);
}
100% {
-webkit-filter: blur(0.01);
filter: blur(0.01);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
<script src="../custom.js"></script>
<link href="smooth.css" rel="stylesheet" type="text/css">
<header class="header">
<div id="smooth-logo">
<svg data-name="big-s" xmlns="http://www.w3.org/2000/svg" width="10in" height="2in" viewBox="0 0 2036.7197 612">
<title>Stable Smooth Logo</title>
<!-- BIG S -->
<path id="bigS" class="" d="M362.2168,367.2317c23.8106,16.6907,51.0516,32.82,83.83,32.82,32.1888,0,56.8072-10.392,56.8072-33.4934,0-22.7209-10.6044-34.0863-70.4407-43.93-59.8364-10.6044-89.757-33.7058-89.757-78.3966,0-46.9588,39.96-79.6635,99.4161-79.6635,36.6579,0,63.8458,7.9425,97.4489,28.7153l-18.0235,37.88c-33.9085-17.7179-47.9607-24.0272-78.4851-24.0272-30.6717,0-49.227,14.75-49.227,35.9591,0,19.3162,10.6044,28.7841,67.4117,38.6325,65.1385,10.98,93.5422,35.2179,93.5422,81.8012,0,49.6124-39.7691,83.9606-109.8293,83.9606-38.3944,0-79.8883-17.5373-102.94-38.04Z"/>
<!-- BIG T -->
<polygon id="bigS1" class="" points="682.881 444.996 682.881 215.385 581.132 215.385 602.355 171.38 842.615 171.38 821.253 215.385 731.83 215.385 731.83 444.996 682.881 444.996"/>
</svg>
</div>
</header>
【问题讨论】:
-
在第二个示例中,您直接针对第一个字母 (
#bigS),并且对于该字母,效果确实有效。所以它似乎按预期工作? -
好的,刚刚在 Chrome 中检查过,它不起作用。但它确实适用于 Firefox。所以这似乎是一个浏览器问题。
-
天啊...铬!我想这是一个后续问题。为什么第一个动画在 Chrome 中可以工作,而第二个则不行?谢谢你的收获,康纳姆。
标签: jquery svg css-animations