有趣的css - 动态雷达扫描

news2024/11/25 21:38:03

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是使用 css 实现一个动态的雷达扫描,快学起来吧!

《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。


目录

  • 整体效果
  • 核心代码
    • html 代码
    • css 部分代码
  • 完整代码如下
    • html 页面
    • css 样式
    • 页面渲染效果

整体效果

知识点:
animation 动画属性中 animation-direction 以及 steps() 参数的使用

思路: 先绘制出整体大圆,然后使用创建伪元素画出内里的小圆,并加上虚线边框;然后绘制出雷达层,加上动画旋转;再给雷达内增加几个闪烁的圆点;最后外层套一个小动画边框。


核心代码部分,简要说明了写法思路;完整代码在最后,可直接复制到本地运行。

核心代码

html 代码

<div class="leidabox50"></div>
<div class="leida50">
  <div class="line50"></div>
  <div class="guangdian50">
    <span class="dian50"></span>
  </div>
</div>

雷达的主体。

css 部分代码

.leidabox50{
  width:220px;
  height:220px;
  border:4px solid rgba(0,0,0,0);
  border-top-color: #33B589;
  border-bottom-color: #33B589;
  border-radius:50%;
  position: absolute;
  animation:leidabox-eff-50 10s linear infinite;
  animation-direction:reverse;
}
@keyframes leidabox-eff-50{
  to{
    transform:rotate(360deg);
  }
}
.leida50{
  width: 200px;
  height: 200px;
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
  background-color: #31FFBA;
  border-radius: 50%;
  border: 1px solid #33B589;
}
.leida50:before,.leida50:after{
  content: '';
  width: 120px;
  height: 120px;
  border-radius: 50%;
  border: 1px dashed rgba(0,0,0,0.14);
  box-shadow: 0 0 20px rgba(0,0,0,0.1);
  position: absolute;
  z-index: 3;
}
.leida50:after{
  width: 60px;
  height: 60px;
  position: absolute;
  z-index: 10;
}
.line50{
  width: 100px;
  height: 100px;
  background-color: rgba(127,255,212,0.4);
  border-radius: 0 0 0 100%;
  position: absolute;
  left: 0;
  top: 100px;
  z-index: 100;
  animation: zhuaneff50 5s linear infinite;
  transform-origin: 100px 0;
}
.line50:after{
  content: '';
  width: 8px;
  height: 8px;
  background-color: rgba(255,255,255,0.6);
  position: absolute;
  top: -4px;
  right: -4px;
  border-radius: 50%;
}
@keyframes zhuaneff50{
  to {
    transform: rotate(360deg);
  }
}
.guangdian50{
  position: absolute;
  bottom: 66px;
}
.dian50,.dian50:after,.dian50:before{
  width: 7px;
  height: 7px;
  background-color: #33B589;
  position: absolute;
  left: -20px;
  border-radius: 50%;
  animation: eff50 5s steps(6) infinite;
  z-index: 999;
}
.dian50:after{
  content: '';
  width: 6px;
  height: 6px;
  top: 12px;
  left: 44px;
}
.dian50:before{
  content: '';
  width: 3px;
  height: 3px;
  top: 40px;
  left: 34px;
}
@keyframes eff50{
  0% {
    opacity: 0;
    transform: translate(0, 0);
  }
  25%{
    opacity: 1;
    transform: translate(-10px, -18px);
  }
  50%{
    opacity: 0;
    transform: translate(-18px, -20px);
  }
  75%{
    opacity: 1;
    transform: translate(-24px, -18px);
  }
  100%{
    opacity: 0;
    transform: translate(-34px, -24px);
  }
}
.guangdian50:after,.guangdian50:before{
  content: '';
  width: 6px;
  height: 6px;
  background-color: #33B589;
  position: absolute;
  top: -100px;
  left: 30px;
  border-radius: 50%;
  z-index: 900;
  animation: eff501 5s steps(6) both infinite;
}
.guangdian50:before{
  width: 7px;
  height: 7px;
  top: -20px;
  left: 40px;
}
@keyframes eff501{
  0% {
    opacity: 0;
  }
  25%{
    opacity: 1;
  }
  50%{
    opacity: 0;
  }
  75%{
    opacity: 1;
  }
  100%{
    opacity: 0;
  }
}

1、.leida50 画出最大的雷达圆形主体,然后通过 .leida50:before.leida50:after 伪元素创建里面的两个小圆,并给两个小圆加上一点阴影效果。

2、.line50 绘制一个矩形,并给它的一个角加上圆角 border-radius: 0 0 0 100%; ,并通过 transform-origin 定位其原点,加上动画旋转,雷达就开始旋转扫描了; 然后
利用 .line50:after 伪元素给中心加上一个固定点,这样整体的雷达扫描区就完成了。

3、再在雷达主体上绘制几个移动的点,利用 .dian50.dian50:after.dian50:before 绘制 3 个大小不一的圆点,并且定位到不同的位置,然后通过加上 animation 动画,设置 steps() 参数,使这 3 个点边闪烁边移动。

4、然后再加上两个固定的圆点,同样加上 animation 动画,设置 steps() 参数,让这 2 个圆点同前面的 3 个圆点同时闪烁。

5、在外层用 .leidabox50 绘制出两个半边框,加上 animation 动画,并设置 animation-direction 参数,使反向旋转。

完整代码如下

html 页面

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css">
    <title>动态雷达扫描</title>
  </head>
  <body>
    <div class="app">
      <div class="leidabox50"></div>
      <div class="leida50">
        <div class="line50"></div>
        <div class="guangdian50">
          <span class="dian50"></span>
        </div>
      </div>
    </div>
  </body>
</html>

css 样式

/** style.css **/
.app{
  width: 100%;
  height: 100vh;
  background-color: #ffffff;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
.leidabox50{
  width:220px;
  height:220px;
  border:4px solid rgba(0,0,0,0);
  border-top-color: #33B589;
  border-bottom-color: #33B589;
  border-radius:50%;
  position: absolute;
  animation:leidabox-eff-50 10s linear infinite;
  animation-direction:reverse;
}
@keyframes leidabox-eff-50{
  to{
    transform:rotate(360deg);
  }
}
.leida50{
  width: 200px;
  height: 200px;
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
  background-color: #31FFBA;
  border-radius: 50%;
  border: 1px solid #33B589;
}
.leida50:before,.leida50:after{
  content: '';
  width: 120px;
  height: 120px;
  border-radius: 50%;
  border: 1px dashed rgba(0,0,0,0.14);
  box-shadow: 0 0 20px rgba(0,0,0,0.1);
  position: absolute;
  z-index: 3;
}
.leida50:after{
  width: 60px;
  height: 60px;
  position: absolute;
  z-index: 10;
}
.line50{
  width: 100px;
  height: 100px;
  background-color: rgba(127,255,212,0.4);
  border-radius: 0 0 0 100%;
  position: absolute;
  left: 0;
  top: 100px;
  z-index: 100;
  animation: zhuaneff50 5s linear infinite;
  transform-origin: 100px 0;
}
.line50:after{
  content: '';
  width: 8px;
  height: 8px;
  background-color: rgba(255,255,255,0.6);
  position: absolute;
  top: -4px;
  right: -4px;
  border-radius: 50%;
}
@keyframes zhuaneff50{
  to {
    transform: rotate(360deg);
  }
}
.guangdian50{
  position: absolute;
  bottom: 66px;
}
.dian50,.dian50:after,.dian50:before{
  width: 7px;
  height: 7px;
  background-color: #33B589;
  position: absolute;
  left: -20px;
  border-radius: 50%;
  animation: eff50 5s steps(6) infinite;
  z-index: 999;
}
.dian50:after{
  content: '';
  width: 6px;
  height: 6px;
  top: 12px;
  left: 44px;
}
.dian50:before{
  content: '';
  width: 3px;
  height: 3px;
  top: 40px;
  left: 34px;
}
@keyframes eff50{
  0% {
    opacity: 0;
    transform: translate(0, 0);
  }
  25%{
    opacity: 1;
    transform: translate(-10px, -18px);
  }
  50%{
    opacity: 0;
    transform: translate(-18px, -20px);
  }
  75%{
    opacity: 1;
    transform: translate(-24px, -18px);
  }
  100%{
    opacity: 0;
    transform: translate(-34px, -24px);
  }
}
.guangdian50:after,.guangdian50:before{
  content: '';
  width: 6px;
  height: 6px;
  background-color: #33B589;
  position: absolute;
  top: -100px;
  left: 30px;
  border-radius: 50%;
  z-index: 900;
  animation: eff501 5s steps(6) both infinite;
}
.guangdian50:before{
  width: 7px;
  height: 7px;
  top: -20px;
  left: 40px;
}
@keyframes eff501{
  0% {
    opacity: 0;
  }
  25%{
    opacity: 1;
  }
  50%{
    opacity: 0;
  }
  75%{
    opacity: 1;
  }
  100%{
    opacity: 0;
  }
}

页面渲染效果

以上就是所有代码,以及简单的思路,希望对你有一些帮助或者启发。


[1] 原文阅读


CSS 是一种很酷很有趣的计算机语言,在这里跟大家分享一些 CSS 实例 Demo,为学习者获取灵感和思路提供一点帮助,希望你们喜欢。

我是 Just,这里是「设计师工作日常」,求点赞求关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1587918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品推荐 | 瑞苏盈科基于立体帧捕捉和视频处理应用的火星Mars EB1开发板

01 产品概述 火星Mars EB1底板是为火星Mars系列FPGA和SoC核心板设计的通用底板&#xff0c;非常适用于立体帧捕捉和视频处理应用&#xff0c;可以为构建基于FPGA的定制化硬件系统提供一个良好的基础和开端。 02 核心亮点 ■ 与所有火星Mars系列FPGA和SoC核心板兼容 ■ 适用…

2024mathorcup数学建模C题思路分析-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图 ’ 是一个简化的物流 网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同 流向进行分拣并发往下一个场地&#xff0c;最终使包裹…

FME学习之旅---day23

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;地理数据库入门 FME 支持读取和写入不同的地理数据库格式;这包括文件地理数据库、个人地理数据库和 ArcSDE 地理数据库。支持矢量和栅格数据类型。在本教程中&#xff0c;我们…

Understanding Flink

Flink 下载&#xff1a; mkdir ~/flink && cd ~/flinkwget --no-check-certificate https://archive.apache.org/dist/flink/flink-1.15.3/flink-1.15.3-bin-scala_2.12.tgz wget --no-check-certificate https://repo1.maven.org/maven2/com/ververica/flink-sql-co…

PHP+MySQL组合开发 易企秀H5场景源码系统 带完整的安装代码包以及搭建教程

在数字化时代&#xff0c;企业对于宣传与推广的需求日益增长&#xff0c;而H5页面作为一种轻量级、跨平台的宣传方式&#xff0c;深受企业青睐。为了满足企业对于H5页面制作的需求&#xff0c;我们基于PHPMySQL组合开发了一套易企秀H5场景源码系统&#xff0c;并提供了完整的安…

PTA(题目集一 题目 代码 C++ 注解)

目录 题目一&#xff1a; 代码&#xff1a; 题目二&#xff1a; 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目五&#xff1a; 代码&#xff1a; 题目六&#xff1a; 代码&#xff1a; 题目七&#xff1a; 代…

VM虚拟机Linux系统Redhat7.4版本进行网络配置

日常中自己搭建的虚拟机一般用到两种网络方式&#xff0c;第一种是仅主机模式、还有一种是NAT模式。 1、仅主机模式&#xff1a;可以和自己本地电脑&#xff0c;或者虚拟机和虚拟机之间进行网络通信&#xff0c;相当于一个局域网&#xff0c;是不能连接外网的。 2、NAT模式&a…

Leetcode刷题之消失的数字(C语言版)

Leetcode刷题之消失的数字&#xff08;C语言版&#xff09; 一、题目描述二、题目解析 一、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 注意&#xff1a;本题相对书上原题稍作…

BIM信息如何整合到可视化大屏中,告诉你步骤。

BIM&#xff08;Building Information Modeling&#xff09;是一种数字化建筑信息模型技术&#xff0c;可以将建筑物的设计、施工和运营过程进行集成和管理。将BIM整合到可视化大屏中可以提供更直观、全面的建筑信息展示和分析。 BIM&#xff08;建筑信息模型&#xff09;可以通…

SFP光模块和媒体转换器的区别

SFP光模块和媒体转换器都是光电转换设备。它们是否可以互换使用&#xff1f;它们之间有什么区别&#xff1f; SFP光模块与媒体转换器&#xff1a;它们是什么&#xff1f; SFP模块是一种可热插拔的光模块&#xff0c;用于连接网络交换机。它可以将电信号转换为光信号&#xff…

Doris 内网安装部署,基于 CentOS 7

实测 CentOS 7.6 和 7.9都可用&#xff0c;CentOS安装包为&#xff1a;标准安装盘DVD版&#xff0c;如果系统安装的是精简版&#xff0c;需要挂载DVD版或者自行下载依赖。 参考文档 快速开始 - Apache Doris Doris 下载地址&#xff1a;2.1.1 ( Latest ) -> x64 ( avx2 )…

spring.rabbitmq.listener.simple.default-requeue-rejected = false 和放入死信队列的区别

目录 一、场景 二、使用 spring.rabbitmq.listener.simple.default-requeue-rejected false 2.1 特点 三、 放入死信队列 四、两种区别 一、场景 当我们使用RabbitMq的时候&#xff0c;我们如果业务中有异常&#xff0c;很有可能造成死循环&#xff0c;因为 在RabbitMQ和…

TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用

TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常见的…

Netty学习——实战篇1 BIO、NIO入门demo 备注

1 BIO 实战代码 Slf4j public class BIOServer {public static void main(String[] args) throws IOException {//1 创建线程池ExecutorService threadPool Executors.newCachedThreadPool();//2 创建ServerSocketServerSocket serverSocket new ServerSocket(8000);log.in…

java下载网络上的文件、图片保存到本地 FileUtils

java下载网络上的文件、图片保存到本地 FileUtils 1. 引入FileUtils依赖2. 实现代码3. 输出结果 1. 引入FileUtils依赖 <!--FileUtils依赖--> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io&l…

(Java)数据结构——图(第九节)AOV网以及拓扑排序

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 AOV网 先前我们了解了有向无环图DAG的概念。 所有的工程或者某种流程可以分为若干个小的工程或者阶段&#xff0c;这些小的工程或者阶段就称为活动。若以图中的顶…

IPV6的相关网络问题

问题 ​​​​​​​ 目录 问题 一.什么是NAT64转换 1.NAT64的工作原理 IPv6到IPv4转换 IPv4到IPv6的响应转换 2.NAT64的优点 3.NAT64的缺点 二.NAT64转换如何实现 1.工作原理 2.实现步骤 DNS查询转换&#xff08;DNS64&#xff09; 地址转换&#xff08;NAT64&a…

ECharts的时间轴样式设置

timeline: {orient: vertical,axisType: category,autoPlay: false,inverse: true,right: 0,top: 5,bottom: 5,width: 100,realtime : true,symbolSize: 3,itemStyle: { // 轴默认样式color : #000000},checkpointStyle: { // 拖动按钮样式borderWidth: 0,width: 5,color: #7f8…

如何正确使用数字化仪前端信号调理?(一)

一、前言 板卡式的数字转换器和类似测量仪器&#xff0c;比如图1所示的德思特TS-M4i系列&#xff0c;都需要为各种各样的特性信号与内部模数转换器&#xff08;ADC&#xff09;的固定输入范围做匹配。 图1&#xff1a;德思特TS-M4i系列高速数字化仪&#xff0c;包括2或4通道版…

Nacos-默认token.secret.key-配置不当权限绕过漏洞复现

漏洞描述&#xff1a; Nacos 身份认证绕过漏洞(QVD-2023-6271)&#xff0c;开源服务管理平台 Nacos在默认配置下未对 token.secret.key 进行修改&#xff0c;导致远程攻击者可以绕过密钥认证进入后台&#xff0c;造成系统受控等后果。 漏洞信息 公开时间&#xff1a;2023-03…