JS关键字球状旋转效果的实例代码


Posted in Javascript onNovember 29, 2013

有时上网查资料,看到别人的博客上有关键字旋转的效果,觉得蛮不错的。于是网上搜索了一下它的实现,好吧,自己动手写写。

HTML:

<!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=gb2312" />
<title></title>
<link rel="stylesheet" href="css/style.css" />
<script type="text/javascript" src="js/lrtk.js"></script>
</head>
<body>
<!-- 代码开始 --> 
<div id="div1">
<a >Asp.net webform</a>
<a >Asp.net mvc</a>
<a >EF</a>
<a >Castle</a>
<a >Spring.net</a>
<a >NHibernate</a>
<a >WCF</a>
<a >WPF</a>
<a >AOP</a>
<a >IoC</a>
<a >SQL</a>
<a >Javascript</a>
<a >Jquery</a>
<a >KendoUI</a>
</div>
</body>
</html>

CSS:
 #div1{height:400px;width:450px; position:relative; margin:10px auto;}
 #div1 a{position:absolute;top:0px;left:0px;font-weight:bold;padding:3px 6px; color:black; text-decoration: none;}
 #div1 a:hover{border:1px solid #eee;background:#ccc;border-radius:5px;}

既然是关键字,我觉得给他们加上不同的颜色才够酷。初始化一个数组存放颜色值,然后再随机分配给各个标签。
var colors = ["#FF60AF","#9F35FF","#FF2D2D","#6C6C6C","#003D79","#00AEAE","#019858"];
         var rand = Math.ceil(Math.random()*6);
         aA[i].style.color=colors[rand];

JS:
var radius = 100;
var dtr = Math.PI/180;
var d=300;
var mcList = [];
var active = false;
var lasta = 1;
var lastb = 1;
var distr = true;
var tspeed=2;
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++)
    {
        var colors = ["#FF60AF","#9F35FF","#FF2D2D","#6C6C6C","#003D79","#00AEAE","#019858"];
        var rand = Math.ceil(Math.random()*6);
        aA[i].style.color=colors[rand];
        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, 10);
};
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);
}

最后看下效果:

JS关键字球状旋转效果的实例代码

Javascript 相关文章推荐
window.addeventjs事件驱动函数集合addEvent等
Feb 19 Javascript
页面中js执行顺序
Nov 09 Javascript
Extjs入门之动态加载树代码
Apr 09 Javascript
Node.js + Redis Sorted Set实现任务队列
Sep 19 Javascript
Jquery中attr与prop的区别详解
May 27 jQuery
React入门教程之Hello World以及环境搭建详解
Jul 11 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
Sep 21 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
利用原生JS实现data方法示例代码
May 28 Javascript
JS实现分页导航效果
Feb 19 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
Feb 28 Javascript
面试中canvas绘制图片模糊图片问题处理
Mar 13 Javascript
JS Loading功能的简单实现
Nov 29 #Javascript
分享Javascript中最常用的55个经典小技巧
Nov 29 #Javascript
浅析JavaScript中的类型和对象
Nov 29 #Javascript
JavaScript中创建类/对象的几种方法总结
Nov 29 #Javascript
转换字符串为json对象的方法详解
Nov 29 #Javascript
javascript对下拉列表框(select)的操作实例讲解
Nov 29 #Javascript
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 #Javascript
You might like
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
php实现word转html的方法
2016/01/22 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
地震发生中逃生十大法则
2008/05/12 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
Python获取邮件地址的方法
2015/07/10 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
给同事的道歉信
2014/01/11 职场文书
初三开学计划书
2014/04/27 职场文书
会计毕业生自荐书
2014/06/12 职场文书
关于爱国的标语
2014/06/24 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
群众路线调研报告范文
2014/11/03 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
angular异步验证器防抖实例详解
2022/03/31 Javascript