【CSS3】CSS3 动画 ④ ( 使用动画制作地图热点图 )

文章目录

  • 一、需求说明
  • 二、动画代码分析
    • 1、地图背景设置
    • 2、热点动画位置测量
    • 3、热点动画布局分析
    • 4、动画定义
    • 5、小圆点实现
    • 6、波纹效果盒子实现
    • 7、延迟动画设置
  • 三、代码示例





一、需求说明



实现如下效果 , 在一张地图上 , 以某个位置为中心点 , 向四周发散 ;

在这里插入图片描述

核心 是实现 向四周 发散 的 波纹动画 ;





二、动画代码分析




1、地图背景设置


地图背景设置 :

地图 是 一张 png 格式的 半透明 背景图片 , 图片大小为 747 x 617 像素 ;

使用 地图 图片 作为 div 盒子模型 的 背景图片 ;

    <!-- 为 该 div 盒子模型 设置 类名为 map --><div class="map"></div>

上述 .map 类对应的 div 盒子模型的大小 , 也要设置为 747 x 617 像素 ; 同时设置 地图 背景图片 , 并设置 水平居中 ;

        .map {/* 盒子模型的宽高 就是 背景图片的宽高 */width: 747px;height: 617px;/* 设置背景图片 */background: url(images/map.png);/* 上下外边距设置为 0 , 左右外边距设置为 auto 居中 */margin: 0 auto;}

该地图是 半透明 白色背景 , 需要设置一个 暗色 的整体背景 , 才能看出来 , 这里将页面设置成 #333 颜色的 纯色背景 ;

        body {background-color: #333;}

设置完毕后 , 可以在网页中查看该背景图 ;


2、热点动画位置测量


在 map 父容器中 , 定义 city 子元素 , 该子元素使用 绝对定位 放置位置 ;

<body><!-- 为 该 div 盒子模型 设置 类名为 map --><div class="map"><!-- 为 该 div 盒子模型 设置 类名为 city --><div class="city"></div></div>
</body>

为上述 city 标签元素设置 CSS 样式 , 设置其定位方式为 绝对定位 , 根据 " 子绝父相 " 原则 , 该子元素 所在的 父容器 必须要使用 相对定位 ;

使用 left 和 top 设置 该 子元素 在 父容器内 距离左侧的位移 和 距离顶部的位移 ;

        .city {/* 使用绝对定位进行定位 , 子绝父相 , 父容器 相对定位 */position: absolute;/* 绝对定位位置 : 距离顶部的位移 */top: 100px;/* 绝对定位位置 : 距离左侧的位移 */left: 100px;/* 设置白色 , 容易分辨 */color: white;}

下面通过 F12 调试的方式 , 将 city 盒子 , 使用 绝对定位 定位到 地图图片 中的 北京 位置 ;

调试 界面中 , 找到 city 盒子模型位置 , 双击其 top 和 left 尺寸 , 使用鼠标滚轮修改该 盒子模型 绝对定位的位置 ;

  • Ctrl + 鼠标滚轮 一次可以增减 100 像素 ;
  • Shift + 鼠标滚轮 一次可以增减 10 像素 ;
  • 鼠标滚轮 一次可以增减 1 像素 ;
  • Alt+ 鼠标滚轮 一次可以增减 0.1 像素 ;

最终得到 , 将 city 布局设置到 北京 位置 , top 属性值为 220 像素 , left 属性值为 562 像素 ;
在这里插入图片描述


3、热点动画布局分析


分析 热点动画 , 发现内层的 蓝色实心 小圆圈 是不变的 , 始终都存在 ;

然后放置 2 ~ 3 个 可缩放的原型图片 作为 热点动画的 波纹 ;


页面的布局如下 : 其中的 dot 盒子是 中心小圆点 盒子 , bowen1 ~ bowen3 是三个波纹效果动画盒子 ;

<body><!-- 为 该 div 盒子模型 设置 类名为 map --><div class="map"><!-- 为 该 div 盒子模型 设置 类名为 city --><div class="city"><!-- 该 div 盒子模型 是 中心的 小圆点 --><div class="dot"></div><!-- 该 div 盒子模型 是 波纹 --><div class="bowen1"></div><div class="bowen2"></div><div class="bowen3"></div></div></div>
</body>

4、动画定义


动画实现如下 : 波纹效果动画 , 就是将 盒子模型 的大小 , 逐渐设置到 100 像素 , 中间可以设置若干动画节点 ;

        @keyframes bowen {0% {}70% {/* 执行到 70% 时 盒子变为 70 像素宽高 透明度为 0 不可见 */width: 70px;height: 70px;opacity: 1;}100% {/* 放到最大时 盒子变为 100 像素宽高 透明度为 0 不可见 */width: 100px;height: 100px;opacity: 0;}}

5、小圆点实现


小圆点实现 : 小圆点直接通过盒子模型实现 , 该盒子模型 宽高 8 像素 , 设置 50% 圆角 , 将外形设置为圆形 ;

        .dot {/* 设置小圆点宽高 */width: 8px;height: 8px;/* 设置小圆点背景颜色 */background-color: #09f;/* 将标签设置为圆形 */border-radius: 50%;}

6、波纹效果盒子实现


波纹效果 盒子 实现 :

  • 该盒子始终要放置在 city 盒子中心位置 , 因此使用绝对定位 position: absolute; 设置了 top: 50%; , left: 50%; , 以及 transform: translate(-50%, -50%); 样式 ;
  • 该盒子模型设置一个 阴影 , box-shadow: 0 0 12px #009dfd; , x , y 轴偏移为 0 , 阴影半径 12 像素 ;
  • 动画属性设置为 animation: bowen 1.5s linear infinite; , 使用 bowen 动画 , 持续时间 1.5 秒 , 使用线性函数 , 无限循环播放 ;
        .city div[class^="bowen"] {/* city 类下的 div 类型标签 , 类型是以 bowen 开头的标签 *//* 使用绝对定位进行定位 , 子绝父相 , 父容器 相对定位 */position: absolute;/* 绝对定位位置 : 距离顶部的位移 */top: 50%;/* 绝对定位位置 : 距离左侧的位移 */left: 50%;/* 保证 波纹 在 父容器中 垂直 / 水平 居中对齐放大后 , 以中心为终点 向四周发散 */transform: translate(-50%, -50%);/* 设置波纹宽高 , 之后设置其放大 */width: 8px;height: 8px;/* 设置阴影 x , y 轴偏移为 0 , 阴影半径 12 像素 */box-shadow: 0 0 12px #009dfd;/* 设置布局为圆形 , 不要是四方的 */border-radius: 50%;/* 设置动画属性 */animation: bowen 1.5s linear infinite;}

7、延迟动画设置


第二个波纹 和 第三个波纹 的 动画 , 需要延迟 0.5 秒 和 1 秒 执行 ;

注意 选择器 的提权使用 , 之前使用了 .city div[class^="bowen"] 选择器 设置了动画属性 , 如果设置动画延迟属性的选择器优先级低于前者选择器 , 那么设置是无效的 , 因此这里使用了 .city div.bowen2 选择器 进行了提权 ;

        .city div.bowen2 {/* 选择器这么写是为了使该选择器 与 .city div[class^="bowen"] 选择器 权限相同否则 该设置 不生效 */animation-delay: 0.5s;}.city div.bowen3 {/* 选择器这么写是为了使该选择器 与 .city div[class^="bowen"] 选择器 权限相同否则 该设置 不生效 */animation-delay: 1s;}




三、代码示例



代码示例 :

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><!-- 设置 meta 视口标签 --><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>CSS3 动画属性示例 - 地图热点</title><style>body {background-color: #333;}.map {/* 子绝父相 , 子元素使用绝对定位 , 该父容器需要使用相对定位 */position: relative;/* 盒子模型的宽高 就是 背景图片的宽高 */width: 747px;height: 617px;/* 设置背景图片 */background: url(images/map.png);/* 上下外边距设置为 0 , 左右外边距设置为 auto 居中 */margin: 0 auto;}.city {/* 使用绝对定位进行定位 , 子绝父相 , 父容器 相对定位 */position: absolute;/* 绝对定位位置 : 距离顶部的位移 */top: 228px;/* 绝对定位位置 : 距离左侧的位移 */left: 548px;/* 设置白色 , 容易分辨 */color: white;}.dot {/* 设置小圆点宽高 */width: 8px;height: 8px;/* 设置小圆点背景颜色 */background-color: #09f;/* 将标签设置为圆形 */border-radius: 50%;}.city div[class^="bowen"] {/* city 类下的 div 类型标签 , 类型是以 bowen 开头的标签 *//* 使用绝对定位进行定位 , 子绝父相 , 父容器 相对定位 */position: absolute;/* 绝对定位位置 : 距离顶部的位移 */top: 50%;/* 绝对定位位置 : 距离左侧的位移 */left: 50%;/* 保证 波纹 在 父容器中 垂直 / 水平 居中对齐放大后 , 以中心为终点 向四周发散 */transform: translate(-50%, -50%);/* 设置波纹宽高 , 之后设置其放大 */width: 8px;height: 8px;/* 设置阴影 x , y 轴偏移为 0 , 阴影半径 12 像素 */box-shadow: 0 0 12px #009dfd;/* 设置布局为圆形 , 不要是四方的 */border-radius: 50%;/* 设置动画属性 */animation: bowen 1.5s linear infinite;}.city div.bowen2 {/* 选择器这么写是为了使该选择器 与 .city div[class^="bowen"] 选择器 权限相同否则 该设置 不生效 */animation-delay: 0.5s;}.city div.bowen3 {/* 选择器这么写是为了使该选择器 与 .city div[class^="bowen"] 选择器 权限相同否则 该设置 不生效 */animation-delay: 1s;}@keyframes bowen {0% {}70% {/* 执行到 70% 时 盒子变为 70 像素宽高 透明度为 0 不可见 */width: 70px;height: 70px;opacity: 1;}100% {/* 放到最大时 盒子变为 100 像素宽高 透明度为 0 不可见 */width: 100px;height: 100px;opacity: 0;}}</style>
</head><body><!-- 为 该 div 盒子模型 设置 类名为 map --><div class="map"><!-- 为 该 div 盒子模型 设置 类名为 city --><div class="city"><!-- 该 div 盒子模型 是 中心的 小圆点 --><div class="dot"></div><!-- 该 div 盒子模型 是 波纹 --><div class="bowen1"></div><div class="bowen2"></div><div class="bowen3"></div></div></div>
</body></html>

执行效果 :
在这里插入图片描述

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

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

相关文章

git使用(常见用法)

一.下载git git官方下载跳转 安装简单,有手就行 二. git的简单使用 1. 连接远程仓库 #初始化 git init #配置账户 git config --global user.name “输入你的用户名” git config --global user.email “输入你的邮箱” git config --list #--q退出 #配置验证邮箱 ssh-key…

前端懒加载

懒加载的概念 懒加载也叫做延迟加载、按需加载&#xff0c;指的是在长网页中延迟加载图片数据&#xff0c;是一种较好的网页性能优化的方式。在比较长的网页或应用中&#xff0c;如果图片很多&#xff0c;所有的图片都被加载出来&#xff0c;而用户只能看到可视窗口的那一部分…

【网络编程】利用套接字实现一个简单的网络通信(UDP实现聊天室 附上源码)

网络编程套接字 &#x1f41b;预备知识&#x1f98b;理解源IP地址和目的IP地址&#x1f40c;认识端口号&#x1f41e; 理解 "端口号" 和 "进程ID"&#x1f41c;简单认识TCP协议&#x1f99f;简单认识UDP协议&#x1f997; 什么是网络字节序 &#x1f577;相…

使用 Docker 和 Streamlit 构建和部署 LangChain 支持的聊天应用程序

文章目录 前言聊天应用程序组件和技术LangChain Python框架开放人工智能模型前端 Streamlit UI使用 Docker 进行部署Docker 优化以实现轻量级和快速构建Docker-compose.yaml 文件基础设施Streamlit 公共云谷歌应用引擎使用 Google Cloud Run 部署应用1.启动服务2. 创建角色并将…

设置height:100%无效的原因以及两种解决方法

原因&#xff1a;我们知道在把盒子宽度自适应为浏览器窗口宽度&#xff0c;只需设置width:100%就可轻松解决问题&#xff0c;但是让盒子的高度自适应浏览窗口的高度并非那么容易&#xff0c;这是因为css内部计算的原因 <!-- 高度实际为字体大小 --> <div class"…

Vscode-工具使用

Vscode &#xff0c;这玩意儿是开源的&#xff0c;以前用收费的破解版&#xff0c;过段时间就高版本不匹配&#xff0c;这次搞个不要钱的玩玩&#xff0c;记录使用心得 下载 下载地址&#xff1a;官网 点击下载&#xff0c;但是这里有个问题下载比较慢&#xff0c;解决办法&a…

【Git】保姆级详解:Git配置SSH Key(密钥和公钥)到github

博主简介&#xff1a;22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a;是瑶瑶子啦每日一言&#x1f33c;: “当人们做不到一些事情的时候&#xff0c;他们会对你说你也同样不能。”——《当幸福来敲门》 克里斯加德纳 Git配置SSH Key 一、什么是Git?二、什么…

模拟实现消息队列

目录 1. 需求分析1.1 介绍一些核心概念核心概念1核心概念2 1.2 消息队列服务器&#xff08;Broker Server&#xff09;要提供的核心 API1.3 交换机类型1.3.1 类型介绍1.3.2 转发规则&#xff1a; 1.4 持久化1.5 关于网络通信1.5.1 客户端与服务器提供的对应方法1.5.2 客户端额外…

UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)D题题解

文章目录 [Count Bracket Sequences](https://atcoder.jp/contests/abc312/tasks/abc312_d)问题建模问题分析1.分析合法括号字符串的特点2.从集合角度分析字符串每个字符的作用代码 Count Bracket Sequences 问题建模 给定一个字符串&#xff0c;字符串内仅有3种字符&#xff…

redis原理 8:有备无患 —— 主从同步

很多企业都没有使用到 Redis 的集群&#xff0c;但是至少都做了主从。有了主从&#xff0c;当 master 挂掉的时候&#xff0c;运维让从库过来接管&#xff0c;服务就可以继续&#xff0c;否则 master 需要经过数据恢复和重启的过程&#xff0c;这就可能会拖很长的时间&#xff…

String 类的运用

目录 1.字符串构造 2.String对象的比较 2.1比较是否引用同一个对象 2. 2boolean equals(Object anObject) 2.3int compareTo(String s) 方法: 按照字典序进行比较 2.4int compareToIgnoreCase(String str) 3.字符串查找 4.2大小写转换 4.3字符串转数组 4.4 格式化 5.字…

web-初始前端

不区分大小写&#xff0c;单双引号&#xff0c; <html><head><title>初识HTML</title></head><body><h1>Hello world!</h1><img src OIF-C.jfif/></body> </html> <!-- 文件格式 --> <!DOCTYPE h…

42. 疯狂爬取王者荣耀所有皮肤高清海报(文末源码)

目录 前言 目的 思路 代码实现 1. 导包&#xff0c;部署好环境 2. 伪装请求头 3. 访问英雄列表&#xff0c;获取英雄ID 4. 分别访问各英雄主页&#xff0c;查看图片详情 5. 写入本地文件夹&#xff08;文件夹自动命名&#xff09; 完整源码 运行效果 总结 前言 阔…

SQL Server数据库 -- 索引与视图

文章目录 一、索引 聚集索引非聚集索引二、视图三、自定义函数 标量函数表值函数四、游标五、总结 前言 在学习完创建库表、查询等知识点后&#xff0c;为了更加方便优化数据库的存储和内容&#xff0c;我们需要学习一系列的方法例如索引与视图等等&#xff0c;从而使我们更加…

用 docker 创建 jmeter 容器,能做性能测试?

我们都知道&#xff0c;jmeter 可以做接口测试&#xff0c;也可以用于性能测试&#xff0c;现在企业中性能测试也大多使用 jmeter。docker 是最近这些年流行起来的容器部署工具&#xff0c;可以创建一个容器&#xff0c;然后把项目放到容器中&#xff0c;就可以构建出一个独立的…

如何使Python Docker镜像安全、快速、小巧

一、说明 在微服务领域&#xff0c;拥有安全、高效和紧凑的 Docker 映像对于成功部署至关重要。本博客将探讨有助于构建此类映像的关键因素&#xff0c;包括不以 root 用户身份运行映像的重要性、在构建映像时更新和升级包、在编写 Dockerfile 指令时考虑 Docker 的层架构&…

【torch.nn.PixelShuffle】和 【torch.nn.UnpixelShuffle】

文章目录 torch.nn.PixelShuffle直观解释官方文档 torch.nn.PixelUnshuffle直观解释官方文档 torch.nn.PixelShuffle 直观解释 PixelShuffle是一种上采样方法&#xff0c;它将形状为 ( ∗ , C r 2 , H , W ) (∗, C\times r^2, H, W) (∗,Cr2,H,W)的张量重新排列转换为形状为…

APT80DQ40BG-ASEMI快恢复二极管APT80DQ40BG

编辑&#xff1a;ll APT80DQ40BG-ASEMI快恢复二极管APT80DQ40BG 型号&#xff1a;APT60DQ20BG 品牌&#xff1a;ASEMI 封装&#xff1a;TO-3P 恢复时间&#xff1a;≤50ns 正向电流&#xff1a;80A 反向耐压&#xff1a;400V 芯片个数&#xff1a;双芯片 引脚数量&…

ArcGIS Pro字段操作代码汇总

属性表是GIS数据的重要组成部分&#xff0c;有了属性表才可以进行分析和分类配色等操作&#xff0c;这里为大家介绍一下ArcGIS Pro中字段操作的相关代码&#xff0c;希望能对你有所帮助。 关键词搜索 打开属性表&#xff0c;点击按属性选择&#xff0c;如下图所示。 点击按属…