3D标签云的简单实现

本文介绍了如何使用JavaScript实现3D标签云,包括球体坐标系的公式、标签的均匀分布和球体旋转的动画效果。通过分解任务,详细讲解了从计算标签位置到创建旋转动画的整个过程,并提供了代码实现和预览链接。
摘要由CSDN通过智能技术生成

3D标签云的实现

  最近在做一些小Demo,看到了3D标签云觉得很酷炫,就学着做了一下。虽然看起来有点难,但是分解了看其实还是很普通的js运动的实现。
  效果预览https://chestnut647.github.io/Demo/cloudTag/


分解

  1. 球体的实现
    • 通过设置角度(α, β)确定标签的坐标位置
    • 球体的实现是通过字体大小和透明度来实现的,远处的标签更小、透明度更低
  2. 球体的旋转
    • 开启定时器,定时通过鼠标的位置来改变球体各个标签位置来达到旋转动画的效果

球体的相关公式
标签分布

https://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/Spherical_with_grid.svg/600px-Spherical_with_grid.svg.png
  在 球体坐标系中, x y z是通过三个值来确定,即以下三个公式

       x = r * sinθ * cosφ y = r * sinθ * sinφz= r * cos θ

  因此我们可以通过对θ φ取随机值,从而把标签分布在球体的表面上,在标签分布的时候,不能随意分布,要均匀分布。引入以下两个公式:

      θ = arccos((2 * i - 1)/ len - 1); φ = θ * sqrt(len * PI)

  其中,(2 * i - 1)/len - 1 是-1 到 1 中均匀分布的数列, 然后用arccos值得到均匀分布的θ值,第二个式子是θ的等差数列

球体旋转

  旋转公式:

      x1 = cosθ * x - sinθ * y; y1 = cosθ * y + sinθ * x; 

  其中x y 是旋转前坐标, θ是逆时针旋转角度, x1 y1是旋转后的坐标,参考来源 http://www.cnblogs.com/ywxgod/archive/2010/08/06/1793609.html


代码实现

html部分

使用一个wrap来包裹住所有的标签
- wrap是一个相对定位,用来代表圆心
- a标签是绝对定位, 在圆上的坐标x y 即为a的left 和top 值

<div id="wrap">
<a href="#" class="tag">前端学习</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值