js+css实现同心圆加载数字进度条动画效果代码

代码语言:html

所属分类:进度条

代码描述:js+css实现同心圆加载数字进度条动画效果代码

代码标签: js css 同心圆 加载 数字 进度条 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
  
  <link rel='stylesheet' href='https://fonts.googleapis.com/css2?family=DM+Sans&amp;display=swap'>
  
<style>
* {
  border: 0;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

:root {
  --hue: 223;
  --bg: hsl(var(--hue),90%,10%);
  --fg: hsl(var(--hue),90%,90%);
  --primary: hsl(var(--hue),90%,50%);
  --trans-dur: 0.3s;
  --trans-timing: cubic-bezier(0.65,0,0.35,1);
  font-size: calc(14px + (30 - 14) * (100vw - 280px) / (3840 - 280));
}

body {
  background-color: var(--bg);
  color: var(--fg);
  display: flex;
  font: 1em/1.5 "DM Sans", sans-serif;
  height: 100vh;
}

.l {
  --dur: 2s;
  --dur-frac: calc(var(--dur) * 0.7);
  --start-delay-a: calc(var(--dur) * 0.125);
  --mid-delay-a: calc(var(--dur) * 0.825);
  --end-delay-a: calc(var(--dur) * 1.825);
  --start-delay-b: calc(var(--dur) * 0.25);
  --mid-delay-b: calc(var(--dur) * 0.95);
  --end-delay-b: calc(var(--dur) * 1.95);
  --end-delay-c: calc(var(--dur) * 1.7);
  animation: fade-slide-in 0.5s var(--trans-timing);
  display: block;
  margin: auto;
  width: 12em;
  height: auto;
}
.l__a, .l__b, .l__c, .l__rotate {
  transform-origin: 64px 64px;
}
.l--running .l__a {
  animation: ring-a-start var(--dur-frac) var(--start-delay-a) linear, ring-a var(--dur) var(--mid-delay-a) linear, ring-a-end var(--dur-frac) var(--end-delay-a) linear;
}
.l--running .l__b {
  animation: ring-b-start var(--dur-frac) var(--start-delay-b) linear, ring-b var(--dur) var(--mid-delay-b) linear, ring-b-end var(--dur-frac) var(--end-delay-b) linear;
}
.l--running .l__c {
  animation: ring-c-start var(--dur-frac) linear, ring-c var(--dur) var(--dur-frac) linear, ring-c-end var(--dur-frac) var(--end-delay-c) linear;
}
.l--running .l__rotate {
  animation: ring-rotate var(--dur) linear infinite;
}

/* Animations */
@keyframes fade-slide-in {
  from {
    opacity: 0;
    transform: translateY(33%);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes ring-a {
  from, to {
    stroke-dashoffset: -329.875;
    transform: rotate(0);
  }
  50% {
    stroke-dashoffset: -94.25;
    transform: rotate(135deg);
  }
}
@keyframes ring-a-start {
  from {
    stroke-dashoffset: 0;
    transform: rotate(0);
  }
  to {
    stroke-dashoffset: -329.875;
    transform: rotate(-360deg);
  }
}
@keyframes ring-a-end {
  from {
    stroke-dashoffset: -329.875;
    transform: rotate(0);
  }
  to {
    stroke-dashoffset: 0;
    transform: rotate(360deg);
  }
}
@keyframes ring-b {
  from, to {
    stroke-dashoffset: -296.8875;
    transform: rotate(0);
  }
  50% {
    stroke-dashoffset: -84.825;
    transform: rotate(135deg);
  }
}
@keyframes ring-b-start {
  from {
    stroke-dashoffset: 0;
    transform: rotate(0);
  }
  to {
    stroke-dashoffset: -296.8875;
    transform: rotate(-360deg);
  }
}
@keyframes ring-b-end {
  from {
    stroke-dashoffset: -296.8875;
    transform: rotate(0);
  }
  to {
    stroke-dashoffset: 0;
    transform: rotate(360deg);
  }
}
@keyframes ring-c {
  from, to {
    stroke-dashoffset: -263.9;
    transform: rotate(0);
  }
  50% {
    stroke-dashoffset: -75.4;
    transform: rotate(135deg);
  }
}
@keyframes ring-c-start {
  from {
    stroke-dashoffset: 0;
    transform: rotate(0);
  }
  to {
    stroke-dashoffset: -263.9;
    transform: rotate(-360deg);
  }
}
@keyframes ring-c-end {
  from {
    stroke-dashoffset: -263.9;
    transform: rotate(0);
  }
  to {
    stroke-dashoffset: 0;
    transform: rotate(360deg);
  }
}
@keyframes ring-rotate {
  from {
    transform: rotate(0);
  }
  to {
    transform: rotate(-720deg);
  }
}
</style>

  
  
</head>

<body translate="no">
  <svg class="l" viewBox="0 0 128 128" role="img" aria-label="0%">
	<defs>
		<filter id="loader-glow">
			<feGaussianBlur result="coloredBlur" stddeviation="1.5"></feGaussianBlur>
			<feMerge>
				<feMergeNode in="coloredBlur"></feMergeNode>
				<feMergeNode in="SourceGraphic"></feMergeNode>
			</feMerge>
		</filter>
		<linearGradient id="loader-grad" x1="0" y1="0" x2="1" y2="1">
			<stop offset="0%" stop-color="#000" />
			<stop offset="100%" stop-color="#fff" />
		</linearGradient>
		<mask id="loader-mask">
			<rect x="0" y="0" width="128" height="128" fill=.........完整代码请登录后点击上方下载按钮下载查看

网友评论0