<!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" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<style>
.tagBall{
width: 800px;
height: 800px;
margin:50px auto;
position: relative;
}
.tag{
display: block;
position: absolute;
left: 0px;
top: 0px;
color: #000;
text-decoration: none;
font-size: 15px;
font-family: "微软雅黑";
font-weight: bold;
}
.tag:hover{border:1px solid #666;}
</style>
<title>3D标签-柯乐义</title>
</head>
<body>
<div class="tagBall">
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">马到成功</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com/a/bjad/9sgmqsee.htm">新年快乐</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com/a/bjad/9sgmqsee.htm">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com/a/bjad/9sgmqsee.htm">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">笑口常开</a>
<a class="tag" target="_blank" href="http://keleyi.com">柯乐义</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">柯乐义</a>
<a class="tag" target="_blank" href="http://keleyi.com">Happy New Year!</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com/a/bjad/9sgmqsee.htm">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">柯乐义</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">好运连连</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">红澄黄绿青蓝紫</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">好运连连</a>
<a class="tag" target="_blank" href="http://keleyi.com">好运连连</a>
<a class="tag" target="_blank" href="http://keleyi.com">某某某</a>
<a class="tag" target="_blank" href="http://keleyi.com">我喜欢你</a>
</div>
<script type="text/javascript">
var tagEle = "querySelectorAll" in document ? document.querySelectorAll(".tag") : getClass("tag"),
paper = "querySelectorAll" in document ? document.querySelector(".tagBall") : getClass("tagBall")[0];
RADIUS = 300,
fallLength = 500,
tags = [],
angleX = Math.PI / 500,
angleY = Math.PI / 500,
CX = paper.offsetWidth / 2,
CY = paper.offsetHeight / 2,
EX = paper.offsetLeft + document.body.scrollLeft + document.documentElement.scrollLeft,
EY = paper.offsetTop + document.body.scrollTop + document.documentElement.scrollTop;

function getClass(className) {
var ele = document.getElementsByTagName("*");
var classEle = [];
for (var i = 0; i < ele.length; i++) {
var cn = ele[i].className;
if (cn === className) {
classEle.push(ele[i]);
}
}
return classEle;
}

function innit() {
for (var i = 0; i < tagEle.length; i++) {
var a, b;
var k = (2 * (i + 1) - 1) / tagEle.length - 1;
var a = Math.acos(k);
var b = a * Math.sqrt(tagEle.length * Math.PI);
// var a = Math.random()*2*Math.PI;
// var b = Math.random()*2*Math.PI;
var x = RADIUS * Math.sin(a) * Math.cos(b);
var y = RADIUS * Math.sin(a) * Math.sin(b);
var z = RADIUS * Math.cos(a);
var t = new tag(tagEle[i], x, y, z);
tagEle[i].style.color = "rgb(" + parseInt(Math.random() * 255) + "," + parseInt(Math.random() * 255) + "," + parseInt(Math.random() * 255) + ")";
tags.push(t);
t.move();
}
}

Array.prototype.forEach = function (callback) {
for (var i = 0; i < this.length; i++) {
callback.call(this[i]);
}
}

function animate() {
setInterval(function () {
rotateX();
rotateY();
tags.forEach(function () {
this.move();
})
}, 17)
}

if ("addEventListener" in window) {
paper.addEventListener("mousemove", function (event) {
var x = event.clientX - EX - CX;
var y = event.clientY - EY - CY;
// angleY = -x* (Math.sqrt(Math.pow(x , 2) + Math.pow(y , 2)) > RADIUS/4 ? 0.0002 : 0.0001);
// angleX = -y* (Math.sqrt(Math.pow(x , 2) + Math.pow(y , 2)) > RADIUS/4 ? 0.0002 : 0.0001);
angleY = x * 0.0001;
angleX = y * 0.0001;
});
}
else {
paper.attachEvent("onmousemove", function (event) {
var x = event.clientX - EX - CX;
var y = event.clientY - EY - CY;
angleY = x * 0.0001;
angleX = y * 0.0001;
});
}

function rotateX() {
var cos = Math.cos(angleX);
var sin = Math.sin(angleX);
tags.forEach(function () {
var y1 = this.y * cos - this.z * sin;
var z1 = this.z * cos + this.y * sin;
this.y = y1;
this.z = z1;
})

}

function rotateY() {
var cos = Math.cos(angleY);
var sin = Math.sin(angleY);
tags.forEach(function () {
var x1 = this.x * cos - this.z * sin;
var z1 = this.z * cos + this.x * sin;
this.x = x1;
this.z = z1;
})
}

var tag = function (ele, x, y, z) {
this.ele = ele;
this.x = x;
this.y = y;
this.z = z;
}

tag.prototype = {
move: function () {
var scale = fallLength / (fallLength - this.z);
var alpha = (this.z + RADIUS) / (2 * RADIUS);
this.ele.style.fontSize = 15 * scale + "px";
this.ele.style.opacity = alpha + 0.5;
this.ele.style.filter = "alpha(opacity = " + (alpha + 0.5) * 100 + ")";
this.ele.style.zIndex = parseInt(scale * 100);
this.ele.style.left = this.x + CX - this.ele.offsetWidth / 2 + "px";
this.ele.style.top = this.y + CY - this.ele.offsetHeight / 2 + "px";
}
}
innit();
animate();
</script>
</body>
</html>

Js_实现3D球体旋转的更多相关文章

  1. CSS3实现3D球体旋转动画

    html <div class="ball-box"> <div class="ball"> <div class="l ...

  2. jQuery可拖拽3D万花筒旋转特效

    这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...

  3. Three.js 第一篇:绘制一个静态的3D球体

    第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...

  4. css3-实现3D立方体旋转

    核心内容: 1.CSS3 中 animation.perspective 属性的熟练运用. 2.CSS3 中的变形属性 transform,在 3D 立体效果中的运用. 3.3D 立方体旋转实现原理. ...

  5. 2d,3d中旋转推导

    二维绕原点旋转,其实点为(x,y),旋转角度为黄色标注的角度. 推导过程如下: x' = r cos(al+be); y' = r sin(al+be);x '= rcosalcosbe-rsinal ...

  6. 基于css3的3D立方体旋转特效

    今天给大家分享一款基于css3的3D立方体旋转特效.这款特效适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器.效果图如下 : ...

  7. 基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转

    基于css3新属性transform,实现3d立方体的旋转 通过原生JS,点击事件,鼠标按下.鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示 实现原理:通过获取鼠 ...

  8. AE模板替换-众多图片沿着球体旋转!与您分享

    AE-模板替换<众多图片沿球体旋转>效果的视频        近日,本人又一次做了AE的[图片替换]的模板尝试,本人感觉:预览视频时发现的效果较新颖,也有些气势;就是短了些,我安排了,&q ...

  9. WPF动态加载3D 放大-旋转-平移

    原文:WPF动态加载3D 放大-旋转-平移 WavefrontObjLoader.cs 第二步:ModelVisual3DWithName.cs public class ModelVisual3DW ...

随机推荐

  1. python自学——文件修改

    #如何修改文件,我们知道文件因为在磁盘上已经有储存了,后面要更新或修改,只能在在原来文件后面追加使用f=open("wenjian_name","r+",enc ...

  2. 创建SQL Server数据库集群的经历

    自己尝试安装SQL Server集群和配置AlwaysOn可用性组,服务器系统是Windows Server 2012 R2,SQL Server是2014企业版,我的环境是一台服务器,然后用Hype ...

  3. ip 命令的使用

    网上相似的资源很多,可以参考如下资料: man ip ip help 博客链接: https://linoxide.com/linux-command/use-ip-command-linux/ ht ...

  4. RSA 非对称加密,私钥转码为pkcs8 错误总结

    RSA 非对称加密,私钥转码为pkcs8 错误总结 最近在和某上市公司对接金融方面的业务时,关于RSA对接过程中遇到了一个坑,特来分享下解决方案. 该上市公司简称为A公司,我们简称为B公司.A-B两家 ...

  5. 深入浅出MS SQL——编辑table 出错

  6. sql注入--mysql

    mysql数据库结构: 数据库A  --> 表名  --> 列名 --> 数据 数据库B  --> 表名  --> 列名 --> 数据 mysql数据库信息: my ...

  7. 博客系统实战——SprintBoot 集成Thymeleaf 实现用户增删查改(含源码)

    近来在学习SprintBoot +Thymeleaf +Maven搭建自己的博客系统,故在学习过程中在此记录一下,也希望能给广大正在学习SprintBoot和Thymeleaf的朋友们一个参考. 以下 ...

  8. table中怎么设置两行间距

    table中设置两行间距方法: css代码实现 <style> table   {   border-collapse:   separate;   border-spacing:   1 ...

  9. Jmeter之目录结构

    首先得了解一下这些东西,以后才能快速的找到某些配置文件进行修改(举个例子,改配置只是其中之一) 一.bin目录examples:  目录中有CSV样例 jmeter.bat  windows的启动文件 ...

  10. Android ListView下拉刷新时卡的问题解决小技巧

    问题:ListView下拉刷新时看上去非常的卡 解决方案: 在BaseAdapter的getView方法中,有三个参数 public View getView(int position, View c ...