标签云效果当前运用比较广泛,当然形式也有很多种,比较常见的一种就是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>

效果如下:

JavaScript 3D球形标签云代码相关推荐

  1. html页面文字随机效果,教你用javascript实现随机标签云效果_附代码

    标签云是一套相关的标签以及与此相应的权重.典型的标签云有30至150个标签.权重影响使用的字体大小或其他视觉效果.同时,直方图或饼图表是最常用的代表约12种不同的权数.因此,标签云彩能代表更多的权,尽 ...

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

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

  3. 基于python3写的源码剖析_基于python3生成标签云代码解析

    这篇文章主要介绍了基于python3生成标签云代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 标签云是现在大数据里面最喜欢使用的一种展现方式 ...

  4. java文字云_Canvas 3D球形文字云动画特效

    Canvas 3D球形文字云动画特效 body { color:#555555; } h4 { font-family:sans-serif; color:#555555; font-size:16p ...

  5. Android炫酷的3D球型标签云开源库 3dTagCloudAndroid 的使用

    Android炫酷的3D球形标签云开源库 3dTagCloudAndroid 的使用 文章目录 Android炫酷的3D球形标签云开源库 3dTagCloudAndroid 的使用 学习过程 使用体会 ...

  6. 添加分类、标签云(球状)、彩色标签

    添加分类页面 1.新建页面 $ cd your-hexo-site $ hexo new page categories 在终端窗口下,定位到 Hexo 站点目录下.使用 hexo new page ...

  7. java 标签云_网站标签云(TagCloud)的实现

    周末闲来没事,就给网站实现了一个标签云(TagCloud)功能,我的网站3D标签云实现了15个网站文章热词,且根据算法得出权重分大小显示.前端实现通过TagCanvas的3D样式标签实现js,TagC ...

  8. 微信小程序模仿快播标签云滚动特效

    说到快播,故事肯定就不少.用过的人都知道快播首页有个标签云的特效效果,就是渐隐渐显外加上下滚动,其实还挺好看的.至于其他故事嘛,因为没有酒,所以,还是来说说代码吧~ 一开始不是做这个特效需求,但因为在 ...

  9. 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果

    TagCloudView是一个完全基于Android ViewGroup编写的控件,支持 将一组View展示为一个3D球形集合,并支持全方向滚动. GitHub中的链接地址:https://githu ...

  10. js实现3d标签云tag动画效果js特效代码

    下载地址JS制作TAG标签云文字动画特效是一款当鼠标悬停某个标签时,当前标签静止,移出恢复滚动效果.tagcloud({ selector: ".tagcloud", //元素选择 ...

最新文章

  1. MegEngine亚线性显存优化
  2. Python 精选笔试面试习题—类继承、方法对象、包管理、闭包、可变类型作为默认参数、列表引用、sort与sorted、 append 和 extend、深拷贝和浅拷贝
  3. Python 技术篇-ffmpeg.exe的安装及配置
  4. jdbc mysql数据库增删查改_通过JDBC对Mysql数据库进行简单的增删改查
  5. 透过汇编另眼看世界之函数调用
  6. C语言试题六十六之请编写函数实现三个数从小到大排序
  7. java json utf-8_Java 编码 和JSON
  8. java 对象克隆_JAVA对象克隆
  9. 几款开源图像处理软件评测研究
  10. 云计算---openstack基础构架以及服务方式详解
  11. hihocoder #1617 : 方格取数(dp)
  12. seaborn常用速查手册
  13. QUIC/UDT/SRT
  14. 【原创】docker在Ubuntu下1小时快速学习
  15. 嵌入式学习之QT学习---6 QT上位机开发之串口助手(下)
  16. 破解还原卡的方法总结!! - Kevins的天空 - CSDNBlog
  17. YII2 blockui
  18. python 输入一个整数,将该整数逆向输出
  19. Badboy提示脚本错误解决方法
  20. python如何提取word文档某个段落所有内容(包括段落、表格、图片一并提取)

热门文章

  1. Python网络爬虫(2)- 爬虫翻译程序-含有道、金山、百度翻译
  2. word修改或删除脚注或尾注分隔符
  3. 怎样抢注到一个刚过期不久的域名?
  4. 按季度求和或平均值等例子
  5. java毕业设计鞋类秒杀商城Mybatis+系统+数据库+调试部署
  6. 两个日期区间跨度是否超过一年,开始日期距当前日期是否超过一年——js实现
  7. php支付宝查询对账单下载地址,通过调用支付宝查询对账单接口返回bill_download_url下载zip,解压缩...
  8. ImportError: _C.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at4_ops6narrow4callERKNS_6Ten
  9. ftp服务器文件无法删除,ftp服务器文件删除
  10. ROC曲线下面积为什么越大越好 (TPR FPR)