Js_实现3D球体旋转
<!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球体旋转的更多相关文章
- CSS3实现3D球体旋转动画
html <div class="ball-box"> <div class="ball"> <div class="l ...
- jQuery可拖拽3D万花筒旋转特效
这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...
- Three.js 第一篇:绘制一个静态的3D球体
第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...
- css3-实现3D立方体旋转
核心内容: 1.CSS3 中 animation.perspective 属性的熟练运用. 2.CSS3 中的变形属性 transform,在 3D 立体效果中的运用. 3.3D 立方体旋转实现原理. ...
- 2d,3d中旋转推导
二维绕原点旋转,其实点为(x,y),旋转角度为黄色标注的角度. 推导过程如下: x' = r cos(al+be); y' = r sin(al+be);x '= rcosalcosbe-rsinal ...
- 基于css3的3D立方体旋转特效
今天给大家分享一款基于css3的3D立方体旋转特效.这款特效适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器.效果图如下 : ...
- 基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
基于css3新属性transform,实现3d立方体的旋转 通过原生JS,点击事件,鼠标按下.鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示 实现原理:通过获取鼠 ...
- AE模板替换-众多图片沿着球体旋转!与您分享
AE-模板替换<众多图片沿球体旋转>效果的视频 近日,本人又一次做了AE的[图片替换]的模板尝试,本人感觉:预览视频时发现的效果较新颖,也有些气势;就是短了些,我安排了,&q ...
- WPF动态加载3D 放大-旋转-平移
原文:WPF动态加载3D 放大-旋转-平移 WavefrontObjLoader.cs 第二步:ModelVisual3DWithName.cs public class ModelVisual3DW ...
随机推荐
- innodb_file_per_table - 转换为InnoDB
共享InnoDB / var / lib / mysql / ibdata1存储的问题InnoDB表当前将数据和索引存储到共享表空间(/ var / lib / mysql / ibdata1).由于 ...
- tcp的半连接与完全连接队列
队列及参数 https://segmentfault.com/a/1190000008224853 server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客 ...
- npm安装vue
目录 npm安装vue Vue.js 是什么 直接用script引入 安装vue 对不同构建版本的解释 安装命令行工具 (CLI) 安装cnpm 安装vue-cli 新建vue项目 运行服务 目录结构 ...
- 转战JS(1) 初探与变量类型、运算符、常用函数与转换
转战JS(1)初探与变量类型.运算符.常用函数与转换 做为一名.NET后台开发人员,正考滤向Web前端开发转型,之前也写过一代前端代码,可是当再回头看JS,并有转向它的意愿的时候,突然发现:原来JS不 ...
- gl 绘制多边形的函数解析 分类: OpenGL(转)
http://blog.csdn.net/zhongjling/article/details/7528091 1,所谓正反面 glFrontFace(GL_CCW); // 设置CCW方向为“正面 ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- IE 8 下sharepoint 2013 难看的字体的解决方案
将 corev15.css 中的有关"Segoe UI","Segoe",Tahoma,移除即可. 一共二处 C:\Program Files\Common F ...
- ajax知识点及正则表达式总结
一.JSON JSON是JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数 ...
- 【Java集合源代码剖析】ArrayList源代码剖析
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/35568011 转载请注明出处:http:// ...
- PHPer是草根吗
以下文字并没有非常多的技术词汇,所以只要对PHP感兴趣的人都可以看看. PHPer是草根吗? 从PHP诞生之日起,PHP就开始在Web应用方面为广大的程序员服务.同时,作为针对Web开发量身定制的脚本 ...