0

嗨,我想给我的徽标添加这种效果

在此处输入图像描述

但不知何故我被卡住了,你能帮帮我吗?我希望圆圈一个接一个地显示,但只有当显示第四个圆圈时,效果才能结束。对不起我的英语不好。请帮忙

html,
body {
  color: #2E4453;
  font-size: 100%;
  font-family: 'Open Sans', Helvetica, Arial, sans-serif;
  font-weight: 400;
  background-color: #D1C4E9;
}

.open-dev-radar {
  position: relative;
  width: 100%;
  padding-top: 100%;
}

.open-dev-badge {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  width: 90px;
  height: 90px;
  /* padding: 15px; */
  border-radius: 50%;
  background-color: #fff;
  box-shadow: 1px 2px 7px rgba(0, 0, 0, 0.34);
}

.gt-dev {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

.gt-dev:after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  -webkit-transform: scale(0);
  -ms-transform: scale(0);
  transform: scale(0);
  border-radius: 50%;
  border: solid 1px rgba(103, 58, 182, 0.74);
  background-image: -webkit-radial-gradient(circle farthest-corner, rgba(103, 58, 182, 0) 52%, rgba(103, 58, 182, 0.62) 100%);
  background-image: radial-gradient( circle farthest-corner, rgba(103, 58, 182, 0) 52%, rgba(103, 58, 182, 0.62) 100%);
  -webkit-animation-duration: 9s;
  animation-duration: 9s;
  -webkit-animation-name: pulse;
  animation-name: pulse;
  -webkit-animation-iteration-count: infinite;
  animation-iteration-count: infinite;
  opacity: 0;
  filter: alpha(opacity=0);
}

.gt-dev:nth-child(4) {
  width: 120px;
  height: 120px;
}

.gt-dev:nth-child(3) {
  width: 190px;
  height: 190px;
}

.gt-dev:nth-child(3):after {
  -webkit-animation-delay: 0.2s;
  animation-delay: 0.2s;
}

.gt-dev:nth-child(2) {
  width: 270px;
  height: 270px;
}

.gt-dev:nth-child(2):after {
  -webkit-animation-delay: 0.4s;
  animation-delay: 0.4s;
}

.gt-dev:nth-child(1) {
  width: 370px;
  height: 370px;
}

.gt-dev:nth-child(1):after {
  -webkit-animation-delay: 0.6s;
  animation-delay: 0.6s;
}

@-webkit-keyframes pulse {
  0% {
    -webkit-transform: scale(0);
    transform: scale(0);
    opacity: 0;
    filter: alpha(opacity=0);
  }
  90% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
    filter: alpha(opacity=100);
  }
  100% {
    -webkit-transform: scale(1.1);
    transform: scale(1.1);
    opacity: 0;
    filter: alpha(opacity=0);
  }
}

@keyframes pulse {
  0% {
    -webkit-transform: scale(0);
    transform: scale(0);
    opacity: 0;
    filter: alpha(opacity=0);
  }
  90% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
    filter: alpha(opacity=50);
  }
  100% {
    -webkit-transform: scale(1.1);
    transform: scale(1.1);
    opacity: 0;
    filter: alpha(opacity=100);
  }
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ripple Animation</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <div class="gt-dev"></div>
  <div class="gt-dev"></div>
  <div class="gt-dev"></div>
  <div class="gt-dev"></div>
  <div class="open-dev-badge"><img src="Loader.svg"></div>

</body>

</html>

4

1 回答 1

0

我会使用稍微不同的方法。

由于圆圈纯粹用于装饰,不包含需要例如由屏幕阅读器解释的信息,因此我会将徽标完全包含在一个元素中,并将背景整体颜色放在该元素上,并将圆圈放在其之前的伪元素上.

然后使用 CSS 动画将具有径向渐变背景的圆圈一一绘制。

在此代码段中,所需的颜色定义为 CSS 变量 col1...,因此您可以在需要时轻松更改它们。动画通过一一设置径向渐变背景中的颜色来工作。

.logo {
  position: relative;
  width: 100vmin;
  height: 100vmin;
  background-color: #303030;
}

.logo::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  display: inline-block;
  --col1: #a5bc1f;
  --col2: #99ae21;
  --col3: #707d28;
  --col4: #4a4f2d;
  --c1: var(--col1);
  --c2: var(--col2);
  --c3: var(--col3);
  --c4: var(--col4);
  background-image: radial-gradient(var(--c1) 0 10%, var(--c2) 10% 20%, var(--c3) 20% 30%, var(--c4) 30% 40%, transparent 40% 100%);
}

.logo::before {
  animation: ripple 4s linear;
}

@keyframes ripple {
  0% {
    --c2: transparent;
    --c3: transparent;
    --c4: transparent;
    --c1: var(--col1);
  }
  33.33% {
    --c2: var(--col2);
  }
  66.66% {
    --c3: var(--col3);
  }
  100% {
    --c4: var(--col4);
  }
}
<div class="logo"></div>

注意:您需要更改径向渐变中的 %s 以获得您想要的效果(或者如果您想要在任何视口尺寸上完全相同的宽度,请更改为 px)。

更新:从随后的评论中可以看出,这个问题实际上比上面给出的解决方案更简单。不是每个环都出现在一个步骤中,而是要求环生长直到它们达到所需的大小,然后下一个环生长。

我们可以通过在一个伪元素上一直使用多环背景来获得这种效果(不需要像上面那样动态地改变它)并简单地从零开始增加它的大小,这样环就可以以连续的方式增长。

.logo {
  position: relative;
  width: 100vmin;
  height: 100vmin;
  --col1: #a5bc1f;
  --col2: #99ae21;
  --col3: #707d28;
  --col4: #4a4f2d;
}

.logo::after {
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-image: radial-gradient(var(--col1) 0 10vmin, var(--col2) 10vmin 20vmin, var(--col3) 20vmin 30vmin, var(--col4) 30vmin 40vmin, transparent 40vmin 100vmin);
  animation: ripple 4s linear 1;
  animation-fill-mode: forwards;
  border-radius: 50%;
  z-index;
  -1;
}

@keyframes ripple {
  0% {
    width: 0;
    height: 0;
  }
  100% {
    width: 100vmin;
    height: 100vmin;
  }
}

.logo::before {
  content: '';
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  position: absolute;
  background-color: #303030;
  z-index: -2;
}
<div class="logo"></div>

于 2021-10-25T07:53:57.643 回答