CSS实现3D球面字符云

2023-05-16

在大屏可视化应用中,使用3D的场景有很多,复杂的交互动画通常是使用Three.js或echarts-gl来实现,但是在一些简单的3D场景中,CSS也可以实现一些不错的展示效果。本文使用CSS相关属性——transform-style、transform、animation实现一个简单的3D字符云展示功能,具体展示效果如下

 案例中除上下顶点外,有5圈的方形牌面、每一圈有12个组成,球形半径为200px,通过旋转和平移,可以将各个牌面按照顺序规整排列。具体实现代码如下

<template>
  <div class="container">
    <div class="platform">
      <div
        v-for="(item, index) in itemList"
        :key="index"
        :style="item.styleStr"
      >
        {{ item.text }}
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      itemList: [], // 球面字符牌面信息
      radius: 200, // 球形半径
      rotateArr: [60, 30, 0, -30, -60], // 每一圈绕X轴旋转的度数
      num: 12, // 每一圈有几个牌面
    };
  },
  mounted() {
    this.calcPosition();
  },
  methods: {
    calcPosition() {
      let numFlag = 0;
      let gap = 360 / this.num;
      this.rotateArr.forEach((item) => {
        for (let i = 0; i < this.num; i++) {
          numFlag += 1;
          this.itemList.push({
            text: numFlag,
            styleStr: `transform: rotateY(${
              i * gap
            }deg) rotateX(${item}deg) translateZ(${this.radius}px)`,
          });
        }
      });
      // 上极点
      this.itemList.push({
        text: (numFlag += 1),
        styleStr: `transform: rotateY(0deg) rotateX(90deg) translateZ(${this.radius}px)`,
      });
      // 下极点
      this.itemList.push({
        text: (numFlag += 1),
        styleStr: `transform: rotateY(0deg) rotateX(-90deg) translateZ(${this.radius}px)`,
      });
    },
  },
};
</script>
<style scoped>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100%;
  background: #000;
}
.platform {
  width: 100%;
  width: 40px;
  height: 40px;
  transform-style: preserve-3d;
  transform: rotateX(-20deg) rotateZ(10deg) rotateY(0deg);
  animation: rotate 10s linear infinite;
}
.platform:hover {
  animation-play-state: paused;
}
@keyframes rotate {
  from {
    transform: rotateX(-20deg) rotateZ(10deg) rotateY(0deg);
  }

  to {
    transform: rotateX(-20deg) rotateZ(10deg) rotateY(360deg);
  }
}
.platform > div {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 127, 127, 0.5);
  outline: 1px solid rgba(127, 255, 255, 0.25);
  box-shadow: 0 0 12px rgba(0, 255, 255, 0.5);
  backface-visibility: visible;
  color: rgba(127, 255, 255, 0.75);
  font-size: 16px;
  text-shadow: 0 0 5px rgb(0 255 255 / 50%);
  font-weight: bold;
}
</style>

关于使用CSS实现3D功能,重要的是要有一定的空间想象能力,结合旋转、平移等属性可实现各种各样的变换效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS实现3D球面字符云 的相关文章

随机推荐

  • 矩阵零空间

    矩阵A的零空间就Ax 61 0的解的集合 零空间的求法 xff1a 对矩阵A进行消元求得主变量和自由变量 xff1b 给自由变量赋值得到特解 xff1b 对特解进行线性组合得到零空间 假设矩阵如下 xff1a 对矩阵A进行高斯消元得到上三角
  • VIO学习总结

    VIO xff08 visual inertial odometry xff09 即视觉惯性里程计 xff0c 有时也叫视觉惯性系统 xff08 VINS xff0c visual inertial system xff09 xff0c 是
  • 单应性(Homography)变换

    我们已经得到了像素坐标系和世界坐标系下的坐标映射关系 xff1a 其中 xff0c u v表示像素坐标系中的坐标 xff0c s表示尺度因子 xff0c fx fy u0 v0 xff08 由于制造误差产生的两个坐标轴偏斜参数 xff0c
  • senmantic slam mapping

    basicStructure hpp common h 定义一些常用的结构体 以及各种可能用到的头文件 xff0c 放在一起方便include 相机内参模型 增加了畸变参数 xff0c common headers h各种可能用到的头文件
  • Ubuntu 20.04 VNC 安装与设置

    原链接 VNC是一个远程桌面协议 按照本文的说明进行操作可以实现用VNC对Ubuntu 20 04进行远程控制 一般的VNC安装方式在主机没有插显示器的时候是无法使用的 下面的操作可以在主机有显示器和没有显示器时都能够正常工作 首先安装x1
  • opencv中类型转换问题

    记录一下最近困惑我的问题 方便以后查阅 在学习立体匹配算法中BM算法时 xff0c 出现在了关于类型转换的问题 xff1a disp convertTo disp8u CV 8U 255 numberOfDisparities 16 不知道
  • 最大似然估计MLE与贝叶斯估计

    最大似然估计 Maximum Likehood Estimation MLE 最大似然估计的核心思想是 xff1a 找到参数 的一个估计值 xff0c 使得当前样本出现的可能性最大 用当年博主老板的一句话来说就是 xff1a 谁大像谁 xf
  • 大疆Livox_mid 40雷达初体验

    为了解决无人车上镭神雷达FOV小而导致的车前3m内无法看到锥形桶问题 东家给公司邮寄了一台大疆的mid40雷达 不得不说 颜值真的高 光看颜值 就甩镭神几条街 昨天重新配置镭神的激光雷达 官方给的配置软件 真的是 用的我心碎啊 算了 不提了
  • 地铁供电系统的构成

    地铁供电系统一般划分为以下几部分 xff1a 外部电源 xff1b 主变电所 xff1b 牵引供电系统 xff1b 动力照明系统和杂散电流腐蚀防护系统 xff1b 电力监控系统 外部电源地铁供电系统的外部电源就是地铁供电系统主变电所供电的外
  • C++ Vector常用函数

    C 43 43 Vector常用函数 begin 函数 原型 xff1a iterator begin const iterator begin 功能 xff1a 返回一个当前vector容器中起始元素的迭代器 end 函数 原型 xff1
  • STM32使用ADC获取内部温度传感器数据输出(直接读取/DMA两种方式实现)

    STM32使用ADC获取内部温度传感器数据输出 xff08 直接读取 DMA两种方式实现 xff09 前言一 内部温度传感器的使用 xff1f 二 代码操作讲解1 直接读取2 DMA处理 总结 前言 STM32F1系列 xff08 本代码基
  • fp32/fp64精度,4/8字节16进制转float/double十进制

    1 IEEE 754 32位单精度浮点数 xff08 4字节 xff09 1 1 32位单精度浮点数 其中 xff0c 32位16进制数包括1位符号位 SIGN xff0c 8位指数位 EXPONENT 和 23位尾数位 MANTISSA
  • SVG绘制圆环进度条

    在我们的大屏可视化项目中 xff0c 经常会用到各种各样的图表 与传统的表格展示 枯燥的文字阐述相比 xff0c 图表展示则使用户看起来更加直观 数据的展示则更加一目了然 本文基于svg绘图技术结合前端技术栈vue xff0c 以工作中常用
  • Canvas绘制地图

    在我们的大屏可视化项目中 xff0c 地图数据可视化是最常见功能 地图数据可视化目前的实现方案有很多 xff0c 其中最具有代表性的莫过于使用echarts xff0c 引入一个js文件 xff0c 再加上一些简单的配置 xff0c 这样一
  • 滚动动画(跑马灯动画)的几种实现方式

    在大屏可视化应用中 xff0c 滚动动效 xff08 跑马灯效果 xff09 也是常见的一种数据展现方式 xff0c 本章节针对字幕滚动和列表滚动效果做一个小小的总结 xff0c 结合vue框架 xff0c 具体展示效果如下 xff0c 从
  • 如何在Ubuntu上安装CUDA

    原链接 在Ubuntu上安装CUDA一直是比较麻烦的事情 由于不同版本的CUDA对显卡驱动有着不同的需求 而在有些电脑上安装最新的Nvidia闭源显卡驱动会导致无法进入图形界面 CUDA中也自带了Nvidia的显卡驱动 xff0c 但是如果
  • 加载loading动画

    提起加载 xff08 loading xff09 效果 xff0c 想必大家都不会陌生 xff0c 在目前的移动端 PC端 各类app均广泛使用 xff0c 使用loading动画能显著提升用户的交互体检 xff0c 尤其是在页面加载速度比
  • CSS锥形渐变实现环形进度条

    10月份因为疫情原因 又开启了居家办公模式 xff0c 空闲之余 xff0c 与其选择 躺平 xff0c 不如去做一些有意义的事情 xff0c 内心的想法驱使着我去做些什么 xff0c 但是又没有合适的素材 xff0c 直到接手了最近的一个
  • CSS实现个性化水球图

    在可视化应用中 xff0c 水球图也是一种常见的数据展示形式 xff0c 关于使用CSS实现个性化水球 xff0c 在相当长的一段时间并没有找到比较简洁的实现方式 xff0c 因此在以往的可视化作品中 xff0c 大多采用echarts插件
  • CSS实现3D球面字符云

    在大屏可视化应用中 xff0c 使用3D的场景有很多 xff0c 复杂的交互动画通常是使用Three js或echarts gl来实现 xff0c 但是在一些简单的3D场景中 xff0c CSS也可以实现一些不错的展示效果 本文使用CSS相