JavaScript 3D球形标签云代码

利用js实现matrix3d绕球旋转效果 利用js来组织数据,实现matrix3d的旋转木马效果。 旋转数据可直接使用,只需根据需求改变startP即可 阅读详情

标签云效果当前运用比较广泛,当然形式也有很多种,比较常见的一种就是3D球形效果。

下面就分享一个这样的代码实例,需要的朋友可以做一下参考。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>3D球形标签</title>
<style type="text/css">
body {
  background: #24313d;
}
#tagsList {
  position: relative;
  width: 450px;
  height: 450px;
  margin: 150px auto 0;
}
 
#tagsList a {
  position: absolute;
  top: 0px;
  left: 0px;
  font-family: Microsoft YaHei;
  color: #fff;
  font-weight: bold;
  text-decoration: none;
  padding: 3px 6px;
}
#tagsList a:hover {
  color: #FF0000;
  letter-spacing: 2px;
}
</style>
<script>
var radius = 120;
var dtr = Math.PI / 180;
var d = 300;
var mcList = [];
var active = false;
var lasta = 1;
var lastb = 1;
var distr = true;
var tspeed = 10;
var size = 250;
 
var mouseX = 0;
var mouseY = 0;
 
var howElliptical = 1;
 
var aA = null;
var oDiv = null;
 
window.onload = function () {
  var i = 0;
  var oTag = null;
 
  oDiv = document.getElementById('tagsList');
  aA = oDiv.getElementsByTagName('a');
 
  for (i = 0; i < aA.length; i++) {
    oTag = {};
    oTag.offsetWidth = aA[i].offsetWidth;
    oTag.offsetHeight = aA[i].offsetHeight;
    mcList.push(oTag);
  }
 
  sineCosine(0, 0, 0);
 
  positionAll();
 
  oDiv.onmouseover = function () {
    active = true;
  };
 
  oDiv.onmouseout = function () {
    active = false;
  };
 
  oDiv.onmousemove = function (ev) {
    var oEvent = window.event || ev;
    mouseX = oEvent.clientX - (oDiv.offsetLeft + oDiv.offsetWidth / 2);
    mouseY = oEvent.clientY - (oDiv.offsetTop + oDiv.offsetHeight / 2);
 
    mouseX /= 5;
    mouseY /= 5;
  };
  setInterval(update, 30);
};
function update() {
  var a;
  var b;
  if (active) {
    a = (-Math.min(Math.max(-mouseY, -size), size) / radius) * tspeed;
    b = (Math.min(Math.max(-mouseX, -size), size) / radius) * tspeed;
  }
  else {
    a = lasta * 0.98;
    b = lastb * 0.98;
  }
  lasta = a;
  lastb = b;
 
  if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) {
    return;
  }
 
  var c = 0;
  sineCosine(a, b, c);
  for (var j = 0; j < mcList.length; j++) {
    var rx1 = mcList[j].cx;
    var ry1 = mcList[j].cy * ca + mcList[j].cz * (-sa);
    var rz1 = mcList[j].cy * sa + mcList[j].cz * ca;
 
    var rx2 = rx1 * cb + rz1 * sb;
    var ry2 = ry1;
    var rz2 = rx1 * (-sb) + rz1 * cb;
 
    var rx3 = rx2 * cc + ry2 * (-sc);
    var ry3 = rx2 * sc + ry2 * cc;
    var rz3 = rz2;
 
    mcList[j].cx = rx3;
    mcList[j].cy = ry3;
    mcList[j].cz = rz3;
 
    per = d / (d + rz3);
 
    mcList[j].x = (howElliptical * rx3 * per) - (howElliptical * 2);
    mcList[j].y = ry3 * per;
    mcList[j].scale = per;
    mcList[j].alpha = per;
 
    mcList[j].alpha = (mcList[j].alpha - 0.6) * (10 / 6);
  }
 
  doPosition();
  depthSort();
}
 
function depthSort() {
  var i = 0;
  var aTmp = [];
 
  for (i = 0; i < aA.length; i++) {
    aTmp.push(aA[i]);
  }
 
  aTmp.sort(function (vItem1, vItem2) {
    if (vItem1.cz > vItem2.cz) {
      return -1;
    }
    else if (vItem1.cz < vItem2.cz) {
      return 1;
    }
    else {
      return 0;
    }
  });
  for (i = 0; i < aTmp.length; i++) {
    aTmp[i].style.zIndex = i;
  }
}
function positionAll() {
  var phi = 0;
  var theta = 0;
  var max = mcList.length;
  var i = 0;
 
  var aTmp = [];
  var oFragment = document.createDocumentFragment();
 
  //随机排序
  for (i = 0; i < aA.length; i++) {
    aTmp.push(aA[i]);
  }
 
  aTmp.sort(function () {
    return Math.random() < 0.5 ? 1 : -1;
  });
  for (i = 0; i < aTmp.length; i++) {
    oFragment.appendChild(aTmp[i]);
  }
  oDiv.appendChild(oFragment);
  for (var i = 1; i < max + 1; i++) {
    if (distr) {
      phi = Math.acos(-1 + (2 * i - 1) / max);
      theta = Math.sqrt(max * Math.PI) * phi;
    }
    else {
      phi = Math.random() * (Math.PI);
      theta = Math.random() * (2 * Math.PI);
    }
    //坐标变换
    mcList[i - 1].cx = radius * Math.cos(theta) * Math.sin(phi);
    mcList[i - 1].cy = radius * Math.sin(theta) * Math.sin(phi);
    mcList[i - 1].cz = radius * Math.cos(phi);
 
    aA[i - 1].style.left=mcList[i - 1].cx+oDiv.offsetWidth /2-mcList[i - 1].offsetWidth/2+'px';
    aA[i - 1].style.top=mcList[i - 1].cy+oDiv.offsetHeight/2-mcList[i - 1].offsetHeight/2+'px';
  }
}
function doPosition() {
  var l = oDiv.offsetWidth / 2;
  var t = oDiv.offsetHeight / 2;
  for (var i = 0; i < mcList.length; i++) {
    aA[i].style.left = mcList[i].cx + l - mcList[i].offsetWidth / 2 + 'px';
    aA[i].style.top = mcList[i].cy + t - mcList[i].offsetHeight / 2 + 'px';
 
    aA[i].style.fontSize = Math.ceil(12 * mcList[i].scale / 2) + 8 + 'px';
 
    aA[i].style.filter = "alpha(opacity=" + 100 * mcList[i].alpha + ")";
    aA[i].style.opacity = mcList[i].alpha;
  }
}
function sineCosine(a, b, c) {
  sa = Math.sin(a * dtr);
  ca = Math.cos(a * dtr);
  sb = Math.sin(b * dtr);
  cb = Math.cos(b * dtr);
  sc = Math.sin(c * dtr);
  cc = Math.cos(c * dtr);
}
</script>
</head>
<body>
  <div id="tagsList">
    <a href="#/Article.aspx?kid=1" title="星级评分">星级评分</a>
    <a href="#/Article.aspx?kid=2" title="层特效">层特效</a>
    <a href="#/Article.aspx?kid=3" title="关键字">关键字</a>
    <a href="#/Article.aspx?kid=4" title="拖拽">拖拽</a>
    <a href="#/Article.aspx?kid=5" title="分页插件">分页插件</a>
    <a href="#/Article.aspx?kid=6" title="时间插件">时间插件</a>
    <a href="#/Article.aspx?kid=7" title="弹出层">弹出层</a>
    <a href="#/Article.aspx?kid=8" title="数据统计">数据统计</a>
    <a href="#/Article.aspx?kid=9" title="HTML5">HTML5</a>
    <a href="#/Article.aspx?kid=10" title="置顶特效">置顶特效</a>
    <a href="#/Article.aspx?kid=11" title="选项卡">选项卡</a>
    <a href="#/Article.aspx?kid=12" title="导航菜单">导航菜单</a>
    <a href="#/Article.aspx?kid=13" title="原创">原创</a>
    <a href="#/Article.aspx?kid=14" title="动画插件">动画插件</a>
    <a href="#/Article.aspx?kid=15" title="实用特效">实用特效</a>
    <a href="#/Article.aspx?kid=16" title="table插件">table插件</a>
    <a href="#/Article.aspx?kid=17" title="文字特效">文字特效</a>
    <a href="#/Article.aspx?kid=18" title="图片特效">图片特效</a>
    <a href="#/Article.aspx?kid=19" title="在线客服">在线客服</a>
    <a href="#/Article.aspx?kid=20" title="瀑布流">瀑布流</a>
    <a href="#/Article.aspx?kid=21" title="蚂蚁部落">softwhy.com</a>
  </div>
</body>

</html>


效果如下:

用JS实现3D球状标签云示例代码 Matter: 1、发现实例不足,无法悬停(有待解决) 2、无法系统随机自动上色(有待解决) 首先使用标签云的一家高知名度的网站---照片共享网站Flickr。标签云的设计者是交互设计师Stewart Butterfield。之后,标签云被诸如del、Technorati等网站采纳。 首次公布的外观标签云(或至少是一个加权名单),可归结起来主要是"潜意识档案" ,在 Douglas 阅读详情

相关推荐

Typecho博客3D彩色标签云插件(Handsome主题优化版)

摘要:ColorfulTags是一款专为Typecho博客Handsome主题设计的3D标签云插件,通过SVG技术实现真实三维旋转效果,提供四种多彩风格选择。插件支持响应式设计、PJAX无缝切换和自定义参数调整,能让博客标签展示更加生动。安装简单,只需上传插件并启用即可获得动态3D球形标签效果,提升博客视觉体验和用户互动性。该插件兼容现代浏览器和大部分Typecho主题,由博主二次开发并开源发布。

BXCQ_xuan的技术专栏 | 实战干货·实践教程·学习笔记 1093

js标签云球形滚动特效代码

js标签云球形滚动特效代码 下载地址:https://www.yujianni.top/news/comp_artinfo.html?id=66

于忠会的博客 833

原生JS实现球面展示特效

分享一个由原生JS实现的球面展示效果,效果如下: 实现代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>原生JS实现球面展示特效&lt.........

分享前端工程化、AI 应用、Agent 开发与大模型实践! 2292

js插件 球形走马灯_使用此插件创建漂亮的球形标签

js插件 球形走马灯 VueTags球 (VueTagsBall) Create a beautiful and spherical tag with this plugin. 使用此插件创建一个漂亮的球形标签。 create a 3d tags ball for vue2. 为vue2创建一个3D标签球。 View demo 查看演示 Download Source 下载源 安装 (...

cuk5340的博客 468

3D球形标签云视觉效果实战项目

3D球形标签云通过将传统平面标签布局拓展至三维空间,利用球面几何结构实现标签的均匀分布与动态交互。其核心技术依赖于三维坐标变换、矩阵运算与图形渲染机制,结合黄金分割螺旋算法或二十面体细分策略实现视觉上无重叠的标签排布。相较于二维标签云,该技术在空间利用率、视觉层次和用户沉浸感方面显著提升,广泛应用于数据仪表盘、知识图谱导航与互动展示场景。当前主流实现方案多基于WebGL或Three.js构建,借助GPU加速实现高性能渲染,为后续章节的坐标计算、变换应用与纹理优化奠定技术基础。

weixin_35751412的博客 816

HTML+CSS+JS实现3D球面标签云动画效果

,它没有默认的样式,非常适合用作自定义布局的容器。我们可以使用嵌套的div元素来创建一个 3D 容器结构,其中最外层的容器用于控制整体的位置与大小,内层的容器则用于包裹所有标签项并应用 3D 变换。-- 标签项将被动态插入到这里 --></div>

weixin_42351520的博客 854

Python jquery标签云

很多知名博主都喜欢弄个标签云。今天特地看了下源码。把标签云的方法单独扣了出来。这里做一下记录html页面代码<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm...

weixin_34130269的博客 79

3D滚动标签云设计与实现

本章系统地讲解了JavaScript在3D标签云中的核心功能,包括:坐标计算:使用极坐标系与笛卡尔坐标系的转换实现标签的球面分布;动画更新:基于的旋转状态更新机制;深度映射:通过Z轴值控制透明度和层级顺序,增强3D视觉效果。这些机制不仅适用于3D标签云,也可拓展至其他3D可视化项目中,例如数据可视化、产品展示、虚拟展厅等。下一章我们将进一步探讨如何将这些动态变化的坐标应用到具体的动画中,实现更丰富的交互体验。

weixin_42575109的博客 1217

Canvas 3D球形文字云动画特效

Canvas 3D球形文字云动画特效 效果图: 代码如下,复制即可使用: (适用浏览器:360、FireFox、Chrome、Opera、傲游、搜狗、世界之窗. 不支持Safari、IE...

qq_29069777的博客 888

标签球状云特效(3D+Html+Js)

本文用三种方法实现关键字特效,第一个是流动效果,每二个是静态效果,第三个是3D云特效 1.因本文中关键字来自sql数据库的表字段,使用前需配置数据连接参数. 2.多个关键字通过逗号分隔,在读取到的关键字,需根据逗号重新分割后再显示,3D效果还需下载一个js文件, js地址:http://www.jimmy2k.top/js/lable_3D.js 3.演示效果地址 : http://www.jimmy2k.top/test/3D_clound.asp 4. 原文来自: http://www.jimmy2k.top/

d3.js 实现文字云效果 简单例子

这是一个使用d3.js 实现文字云效果的一个简单例子。 D3.js是一个功能非常强大的数据可视化js框架。比起echarts,定制性更强,插件丰富。

html3d云标签,用JS实现3D球状标签云示例代码

Matter:1、发现实例不足,无法悬停(有待解决)2、无法系统随机自动上色(有待解决)首先使用标签云的一家高知名度的网站---照片共享网站Flickr。标签云的设计者是交互设计师Stewart Butterfield。之后,标签云被诸如del、Technorati等网站采纳。首次公布的外观标签云(或至少是一个加权名单),可归结起来主要是"潜意识档案" ,在 Douglas Coupland的Mi...

weixin_39847728的博客 465

关键字球状旋转效果(JS)

关键字球状旋转效果(JS),源码库www.aspku.com 推荐下载! 使用方法: 1.引用样式文件css/style.css 2.引用效果的具体js代码文件js/lrtk.js复制至html文件中。 3.将id为div1的div的内容复制到您的html文件 4.中间的链接可以随意改动添加(太多或太少会影响美观哦~)

炫酷3D球形标签云

模拟将标签数据做成一个富勒烯球状的3D模型,然后鼠标放上去可以自己旋转起来,如果觉得还太单调可以自己设置好看的背景来填充,炫酷3D球形标签云。

kongzhonghu的专栏 1071

ABAQUS应用15——Abaqus软件中边界条件与力学中自由度的关系

核心关系:Abaqus通过约束自由度实现边界条件,自由度类型由单元决定。正确设置步骤:确定模型类型(实体/梁/壳)。识别节点的自由度(平动或转动)。根据实际约束施加对应的自由度限制。验证:通过检查变形模式、反力分布等确认边界条件合理性。正确理解自由度与边界条件的关系,是确保有限元模型准确模拟实际物理行为的关键。

George的博客 1545

保姆级教程:用Python 3.10和Ollama在Windows上搞定LightRAG本地部署(附环境配置避坑指南)

本文提供了一份详细的Windows系统下LightRAG本地部署指南,涵盖Python 3.10环境配置、Ollama模型服务安装到LightRAG核心组件部署的全流程。特别针对Windows平台常见问题提供解决方案,帮助开发者快速搭建高效的检索增强生成(RAG)系统,实现专业领域知识的智能检索与整合。

weixin_28725407的博客 498

php球形,标签云(tagcloud)的球形JQuery插件

大家可能都看到过Flash实现的标签云,很多网站都使用Flash构建的标签云,包括wordpress中都有相关的标签云插件。今天我们这里介绍一款jQuery开发的标签云插件:3D tag cloud,希望大家喜欢!相关选项zoom: 90 初始的缩放度min_zoom: 25max_zoom: 120zoom_factor: 2 - 鼠标滚轮的缩放速度rotate_factor: -0.45 - ...

weixin_42524171的博客 357

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1021

为什么你的网站需要这个6KB的3D标签云效果?[特殊字符]

在当今竞争激烈的网络世界中,如何让访客在你的网站上停留更长时间?答案可能就藏在这个仅6KB大小的**3D标签云**组件中。TagCloud.js是一个轻量级JavaScript库,能够为你的网站添加炫酷的3D标签云效果,让关键词以立体的方式悬浮滚动,跟随鼠标互动,为平淡的页面注入活力。 ## 什么是3D标签云?🌟 **3D标签云**是一种创新的视觉展示方式,将关键词以球形分布的形式呈现,每个

gitblog_00560的博客 345

MATLAB实战:手把手教你绘制发动机万有特性曲线(附完整代码)

本文提供了一份详细的MATLAB实战指南,手把手教你从发动机台架试验数据出发,通过数据预处理、核心插值算法和可视化技巧,绘制出专业、精确的发动机万有特性曲线图。文章深入解析了万有特性图的核心构成与工程意义,并附带了完整的模块化代码,帮助工程师和学生快速掌握这一关键技能。

weixin_29094539的博客 412

Python图像处理之光斑分析

光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标截取以及半径拟合等。

微小冷的学习笔记 2857

使用Three.js网页引擎创建酷炫的3D效果的标签墙

使用Three.js引擎(这是开源的webgl三维引擎,gitgub)进行一个简单应用。 做一个酷炫的3d效果的标签墙(已经放在我的博客首页的右下角,pc可见), 去我的博客首页看看实际效果 www.songshizhao.com 静态效果如下图所示: 让所有的标签组成一个球体,并且运动起来。可以手动拖拽,点击可以跳转等等。。 做完之后小小的总结一下。最后我会把本文的代码整...

djkje68462的专栏 863

华为校招&实习&留学生机试真题目录+算法分类+在线OJ+通过率+视频讲解

全网最新最全华为校招&实习&留学生机试真题题库

m0_73659489的博客 6876

3D球状标签云(兼容IE8)

看见一个很有趣的标签云,3D球状,兼容 IE 8,亲测可用!其他版本没有测试。觉得挺有意思就拿来记录下来,学习学习,本文下方会放出我看的文章地址,先看一下效果: 接下来是代码,html + css + js,不是基于jQuery的,所以不需要引入,代码复制下来就可以看到效果: <div id="div1"> <a href="htt...

320

详解FreeRTOS:低功耗Tickless模式(高级篇—7)

FreeRTOS提供了一个叫做Tickless的低功耗模式,本篇博文我们就来学习一下如何使用这个Tickless模式。

不脱发的程序猿 1899

勇闯dify v1.0.0之设置模型供应商。解决:Reached maximum retries (3) for URL https://marketplace.dify.ai/

朋友们,大家好,今天带大家来勇闯dify v1.0.0。为什么叫勇闯呢?我就这么说吧,本来我昨天就想带大家勇闯v1.0.0的。但是dify的marketplace访问不了。公司的网和手机热点都试了,就是访问不了。我们连个模型都没有,还勇闯个球啊,对吧,就搁置了。今天,我赶紧看看这个marketplace好了没。一看,可以了。赶紧写下这篇博客,帮助同志们走出困境。

xiezhipu的博客 4617
上一篇: JavaScript仿新浪微博搜索框功能
下一篇: 动态组件使用ODBC连接mysql读取数据笔记
Return_KB
博客等级 码龄9年 23粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值