3D标签云的简单实现

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>
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Three.js和TagCloud.js来创建一个JavaScript 3D标签。 1. 首先,您需要引入Three.js和TagCloud.js库: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/three-tag-cloud@1.0.2/dist/three-tag-cloud.min.js"></script> ``` 2. 创建一个canvas元素: ```html <canvas id="canvas"></canvas> ``` 3. 使用JavaScript创建标签: ```javascript // 获取canvas元素和窗口大小 const canvas = document.getElementById('canvas'); const width = window.innerWidth; const height = window.innerHeight; // 创建场景、相机和渲染器 const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000); const renderer = new THREE.WebGLRenderer({ canvas }); renderer.setSize(width, height); // 创建标签 const tagCloud = new THREE.TagCloud(); tagCloud.update(['JavaScript', 'HTML', 'CSS', 'Three.js', 'TagCloud.js'], { font: 'Arial', size: 40, color: '#ffffff', backgroundColor: '#333333', }); // 将标签添加到场景中 scene.add(tagCloud); // 设置相机位置 camera.position.z = 500; // 渲染循环 function animate() { requestAnimationFrame(animate); tagCloud.rotateY(0.002); renderer.render(scene, camera); } animate(); ``` 此代码将创建一个具有JavaScript、HTML、CSS、Three.js和TagCloud.js标签标签,并将其添加到场景中。然后,它将设置相机位置并启动渲染循环,以便在屏幕上呈现标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值