js简单实现标签云效果实例


Posted in Javascript onAugust 06, 2015

本文实例讲述了js简单实现标签云效果。分享给大家供大家参考。具体如下:

这里的JavaScript标签云,基于妙味课堂miaov.js文件,非常流行的网页效果,在网页的右侧或左侧开辟一小块地方,用来显示热门的标签,形式就选择标签云吧,绝对酷哦,相信你也会喜欢。

运行效果如下图所示:

js简单实现标签云效果实例

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>js标签云</title>
<style>
body {background: #000;}
#div1 {position:relative; width:450px; height:450px; margin: 20px auto 0; }
#div1 a {position:absolute; top:0px; left:0px; font-family: Microsoft YaHei; color:#fff; font-weight:bold; text-decoration:none; padding: 3px 6px; }
#div1 a:hover {border: 1px solid #eee; background: #000; }
#div1 .blue {color:blue;}
#div1 .red {color:red;}
#div1 .yellow {color:yellow;}
p { font: 16px Microsoft YaHei; text-align: center; color: #ba0c0c; }
p a { font-size: 14px; color: #ba0c0c; }
p a:hover { color: red; }
p a:hover {color:red; }
</style>
<script type="text/javascript" src="miaov.js"></script>
</head>
<body>
<div id="div1">
  <a href="#">JS课程</a>
  <a href="#" class="red">教程</a>
  <a href="#">回头一眸</a>
  <a href="#">精品</a>
  <a href="#" class="blue">源码下载</a>
  <a href="#">SEO</a>
  <a href="#" class="red">特效</a>
  <a href="#">继承</a>
  <a href="#" class="red">三水点靠木</a>
  <a href="#" class="blue">OOP</a>
  <a href="#">XHTML</a>
  <a href="#">W3C</a>
  <a href="#">石川</a>
  <a href="#" class="yellow">人生如歌</a>
  <a href="#">blue</a>
</div>
</body>
</html>

miaov.js代码如下:

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('div1');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);}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
用 JavaScript 迁移目录
Dec 18 Javascript
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
Dec 08 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 Javascript
Bootstrap table表格简单操作
Feb 07 Javascript
详解vuex结合localstorage动态监听storage的变化
May 03 Javascript
原生JS实现的轮播图功能详解
Aug 06 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
Dec 28 Javascript
vue结合element-ui使用示例
Jan 24 Javascript
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
使用requestAnimationFrame实现js动画性能好
Aug 06 #Javascript
JavaScript实现的圆形浮动标签云效果实例
Aug 06 #Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 #Javascript
jquery实现选中单选按钮下拉伸缩效果
Aug 06 #Javascript
js实现网页抽奖实例
Aug 05 #Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 #Javascript
JavaScript实现可拖拽的拖动层Div实例
Aug 05 #Javascript
You might like
PHP的分页功能
2007/03/21 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Python计算信息熵实例
2020/06/18 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
Solaris操作系统的线程机制
2015/07/28 面试题
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle