HTML5超炫3D雷达扫描地图玩法

本文介绍如何使用HTML5和CSS3创建具有3D立体效果的雷达扫描地图。当点击雷达时,地图会显示并详细标注特定地点的坐标信息。HTML代码主要为一个div容器,CSS代码运用旋转动画呈现雷达动画,而JavaScript则负责添加元素和切换3D地图上的标注信息。
摘要由CSDN通过智能技术生成

使用HTML5和CSS3实现雷达扫描超炫丽效果,它的一大特点是3D立体的视觉效果,鼠标点击雷达后将会展现一张3D立体地图,并且对地图上指定的几个地点进行坐标详细信息描述。

下面我讲解一下我是怎么写的

HTML代码

首先HTML代码非常简单,只需在页面上展示一个div容器即可。

<div class="radar"></div>

CSS代码

这里主要利用了CSS3的旋转等动画特性,看看以下的CSS代码,主要是完成所有的动画:

@-webkit-keyframes flashing {
  0%,
  30% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  70%,
  100% {
    -webkit-transform: scale(0);
            transform: scale(0);
  }
}
@keyframes flashing {
  0%,
  30% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  70%,
  100% {
    -webkit-transform: scale(0);
            transform: scale(0);
  }
}
@-webkit-keyframes pulsation {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
    border-color: red;
    background-color: rgba(255, 0, 0, 0.6);
  }
  80%,
  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
    border-color: rgba(255, 0, 0, 0.2);
    background-color: rgba(255, 0, 0, 0.1);
  }
}
@keyframes pulsation {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
    border-color: red;
    background-color: rgba(255, 0, 0, 0.6);
  }
  80%,
  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
    border-color: rgba(255, 0, 0, 0.2);
    background-color: rgba(255, 0, 0, 0.1);
  }
}
@-webkit-keyframes rotation {
  from {
    -webkit-transform: rotate(0deg) translateZ(1px);
            transform: rotate(0deg) translateZ(1px);
  }
  to {
    -webkit-transform: rotate(360deg) translateZ(1px);
            transform: rotate(360deg) translateZ(1px);
  }
}
@keyframes rotation {
  from {
    -webkit-transform: rotate(0deg) translateZ(1px);
            transform: rotate(0deg) translateZ(1px);
  }
  to {
    -webkit-transform: rotate(360deg) translateZ(1px);
            transform: rotate(360deg) translateZ(1px);
  }
}
@-webkit-keyframes scale {
  from {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  to {
    -webkit-transform: scale(1.3);
            transform: scale(1.3);
  }
}
@keyframes scale {
  from {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  to {
    -webkit-transform: scale(1.3);
            transform: scale(1.3);
  }
}
@-webkit-keyframes polish {
  30%,
  100% {
    -webkit-transform: skewX(35deg) translateX(380%);
            transform: skewX(35deg) translateX(380%);
  }
}
@keyframes polish {
  30%,
  100% {
    -webkit-transform: skewX(35deg) translateX(380%);
            transform: skewX(35deg) translateX(380%);
  }
}

当然这个雷达光是有动画是不行的,还得有漂亮的外观,用以下CSS代码实现:

.radar {
  height: 40em;
  width: 48em;
  position: relative;
  cursor: pointer;
  -webkit-perspective: 62.5em;
          perspective: 62.5em;
}
.radar .radar-map-container,
.radar .risk-points,
.radar .scanning-circle canvas {
  left: 0;
  top: 0;
  position: absolute;
}
.radar .radar-map-container,
.radar .radar-map,
.radar .scanning-circle,
.radar .risk-elements-group {
  -webkit-transition: opacity 2.5s ease-out, -webkit-transform 2.5s ease-out, -webkit-transform-origin;
  transition: opacity 2.5s ease-out, -webkit-transform 2.5s ease-out, -webkit-transform-origin;
  transition: transform 2.5s ease-out, opacity 2.5s ease-out, transform-origin;
  transition: transform 2.5s ease-out, opacity 2.5s ease-out, transform-origin, -webkit-transform 2.5s ease-out, -webkit-transform-origin;
}
.radar .radar-map-container,
.radar .radar-map,
.radar .scanning-circle {
  will-change: transform;
}
.radar .radar-map-container {
  width: 400%;
  height: 400%;
  left: -150%;
  top: -150%;
  -webkit-transform: scale(0.25);
          transform: scale(0.25);
  -webkit-transform-style: preserve-3d;
          transform-style: preserve-3d;
}
.radar .radar-map {
  color: rgba(19, 182, 206, 0.4);
  background: url('http://i64.tinypic.com/5l17ut.jpg') center / contain no-repeat;
  width: 100%;
  height: 100%;
  -webkit-transform-style: preserve-3d;
          transform-style: preserve-3d;
}
.radar .radar-map.roaming {
  -webkit-transition-duration: 5s !important;
          transition-duration: 5s !important;
  -webkit-transition-timing-function: ease-in-out;
          transition-timing-function: ease-in-out;
  -webkit-transition-delay: .5s;
          transition-delay: .5s;
}
.radar .radar-map .risk-elements-group {
  opacity: 0;
  -webkit-transform-style: preserve-3d;
          transform-style: preserve-3d;
}
.radar .radar-map .risk-elements-group .red-flag,
.radar .radar-map .risk-elements-group .info-panel,
.radar .radar-map .risk-elements-group .dashed-circle {
  position: absolute;
}
.radar .radar-map .risk-elements-group .red-flag,
.radar .radar-map .risk-elements-group .dashed-circle {
  visibility: hidden;
}
.radar .radar-map .risk-elements-group .red-flag,
.radar .radar-map .risk-elements-group .info-panel {
  -webkit-transform-origin: bottom;
          transform-origin: bottom;
  -webkit-transform: rotateX(-70deg);
          transform: rotateX(-70deg);
}
.radar .radar-map .risk-elements-group .red-flag {
  width: 0.5em;
  height: 10em;
  background-color: white;
  -webkit-transform: rotateX(-70deg) rotateZ(-90deg);
          transform: rotateX(-70deg) rotateZ(-90deg);
}
.radar .radar-map .risk-elements-group .red-flag.stand-up {
  -webkit-transform: rotateX(-70deg);
          transform: rotateX(-70deg);
  visibility: visible;
}
.radar .radar-map .risk-elements-group .red-flag:before {
  content: attr(data-city);
  font-weight: bold;
  color: white;
  position: absolute;
  background-color: red;
  -webkit-clip-path: polygon(0 0, 100% 50%, 0 100%);
  -moz-clip-path: polygon(0 0, 100% 50%, 0 100%);
  clip-path: polygon(0 0, 100% 50%, 0 100%);
  width: 4.782608695652174em;
  height: 3.4782608695652173em;
  line-height: 3.4782608695652173em;
  font-size: 1.4375em;
  font-family: 微软雅黑;
  letter-spacing: 0.43478260869565216em;
  padding-left: 0.5217391304347826em;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  top: 0.43478260869565216em;
  white-space: nowrap;
}
.radar .radar-map .risk-elements-group .red-flag:after {
  content: '';
  position: absolute;
  width: 2.1875em;
  height: 0.625em;
  border-radius: 50%;
  background-color: inherit;
  top: calc(100% - 0.625em);
  left: calc(50% - 1.09375em);
}
.radar .radar-map .risk-elements-group .info-panel {
  -webkit-transform: rotateX(-70deg) translateY(-30%);
          transform: rotateX(-70deg) translateY(-30%);
  -webkit-filter: opacity(0);
  -moz-filter: opacity(0);
  filter: opacity(0);
  border: 0.0625em solid #DCDA6B;
  border-radius: 0.25em;
  background-color: rgba(245, 228, 158, 0.31);
  display: table;
  font-weight: bold;
  font-size: 2.5em;
  text-shadow: 0.025em 0.025em 0.05em black;
  padding: 0.2em 0.3em;
  font-family: 黑体;
  overflow: hidden;
}
.radar .radar-map .risk-elements-group .info-panel.showup {
  -webkit-filter: opacity(1);
  -moz-filter: opacity(1);
  filter: opacity(1);
  transition: -webkit-filter 1s linear 0.5s, -moz-filter 1s linear 0.5s, filter 1s linear 0.5s, opacity 0.5s linear;
}
.radar .radar-map .risk-elements-group .info-panel.polish:after {
  -webkit-animation: polish 5s linear 1 1s;
          animation: polish 5s linear 1 1s;
}
.radar .radar-map .risk-elements-group .info-panel .info-title {
  background-image: -webkit-gradient(linear, left top, right top, from(rgba(208, 209, 120, 0.6)), to(rgba(223, 226, 183, 0.05)));
  background-image: linear-gradient(to right, rgba(208, 209, 120, 0.6), rgba(223, 226, 183, 0.05));
  color: #FFE401;
  padding: 0 0.275em;
  border-radius: inherit;
}
.radar .radar-map .risk-elements-group .info-panel .info-content {
  color: white;
  margin: 0.25em;
  line-height: 1.3em;
}
.radar .radar-map .risk-elements-group .info-panel:after {
  content: '';
  position: absolute;
  width: 30%;
  height: 100%;
  -webkit-transform: skewX(35deg) translateX(-160%);
          transform: skewX(35deg) translateX(-160%);
  top: 0;
  background-image: -webkit-gradient(linear, left top, right top, from(transparent), color-stop(rgba(255, 255, 255, 0.3)), to(transparent));
  background-image: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.3), transparent);
}
.radar .radar-map .risk-elements-group .dashed-circle {
  width: 7.5em;
  height: 7.5em;
  border-radius: 50%;
  background: center / contain no-repeat;
  -webkit-animation: rotation 5s linear infinite;
          animation: rotation 5s linear infinite;
  -webkit-transition-property: visibility;
  transition-property: visibility;
}
.radar .radar-map .risk-elements-group .dashed-circle:after {
  content: '';
  border-radius: inherit;
  margin: auto;
  width: 15%;
  height: 15%;
  background-color: #E03636;
  -webkit-box-shadow: 0 0 0.9375em black;
          box-shadow: 0 0 0.9375em black;
  -webkit-animation: scale 1s linear infinite alternate;
          animation: scale 1s linear infinite alternate;
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}
.radar .changing-number-container {
  position: absolute;
  right: 12%;
  top: 10%;
  bottom: 0;
  margin: auto;
}
.radar .changing-number-container {
  display: table;
  color: #10ABE0;
}
.radar .changing-number-container:before,
.radar .changing-number-container:after {
  display: inline-block;
}
.radar .changing-number-container:before {
  content: '';
  background: -webkit-gradient(linear, left top, left bottom, color-stop(45%, transparent), color-stop(55%, currentColor), color-stop(55%, transparent)) center / 100% 1em;
  background: linear-gradient(to bottom, transparent 45%, currentColor 55%, transparent 55%) center / 100% 1em;
  width: 1em;
  height: 100%;
  margin-right: 0.625em;
}
.radar .changing-number-container:after {
  font-size: 0.75em;
  content: attr(data-number);
  width: 1.3333333333333333em;
  line-height: 1.3333333333333333em;
  word-break: break-all;
  letter-spacing: 1.3333333333333333em;
  vertical-align: top;
  font-weight: bold;
}
.radar .risk-points {
  z-index: 15;
}
.radar .risk-points .risk-point-group .risk-point {
  position: absolute;
  width: 0.625em;
  height: 0.625em;
  border-radius: 50%;
  -webkit-filter: blur(2px);
}
.radar .risk-points .risk-point-group .risk-point:after {
  content: '';
  display: block;
  height: 100%;
  border-radius: 50%;
  will-change: transform;
  -webkit-transform: scale(0);
          transform: scale(0);
}
.radar .risk-points .risk-point-group .risk-point.type1:after {
  -webkit-box-shadow: 0 0 0.3125em 0.3125em white inset, 0 0 0.3125em 0.5625em rgba(245, 76, 128, 0.54), 0 0 2.5625em 1.5625em rgba(222, 17, 17, 0.89);
          box-shadow: 0 0 0.3125em 0.3125em white inset, 0 0 0.3125em 0.5625em rgba(245, 76, 128, 0.54), 0 0 2.5625em 1.5625em rgba(222, 17, 17, 0.89);
}
.radar .risk-points .risk-point-group .risk-point.type2:after {
  -webkit-box-shadow: 0 0 0.3125em 0.3125em white inset, 0 0 0.3125em 0.5625em #15d8e8, 0 0 2.5625em 1.5625em rgba(44, 218, 226, 0.89);
          box-shadow: 0 0 0.3125em 0.3125em white inset, 0 0 0.3125em 0.5625em #15d8e8, 0 0 2.5625em 1.5625em rgba(44, 218, 226, 0.89);
}
.radar .risk-points .risk-point-group .risk-point.critical {
  -webkit-transform: scale(1);
          transform: scale(1);
}
.radar .risk-points .risk-point-group .risk-point.ordinary {
  -webkit-transform: scale(0.4);
          transform: scale(0.4);
}
.radar .risk-points .risk-point-group .risk-point.pulsation {
  color: red;
  -webkit-filter: none;
  width: 5em;
  height: 5em;
}
.radar .risk-points .risk-point-group .risk-point.pulsation .pulse-circle {
  position: absolute;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  border: 0.1875em solid currentColor
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值