使用Three.js引擎(这是开源的webgl三维引擎,gitgub)进行一个简单应用。

做一个酷炫的3d效果的标签墙(已经放在我的博客首页的右下角,pc可见),

去我的博客首页看看实际效果 www.songshizhao.com

静态效果如下图所示:

让所有的标签组成一个球体,并且运动起来。可以手动拖拽,点击可以跳转等等。。

做完之后小小的总结一下。最后我会把本文的代码整理为html分享在这篇文章下面

首先第一步创建一个载体,

            <div id="canvas" style="width: 100%; background: url(images/background/bg1.jpg) no-repeat center; height: 400px;">
<%--列表--%>
</div>

这个载体的作用就是将三维引擎的内容呈现在其中,关键是自定义一个id名字,我用canvas,其余都正常。

然后把你想要做动态展示的标签写出来,放在id=‘canvas’元素里,每个标签都需要有id属性。因为我是动态生成的,就不举例子了。three.js可以查找页面中元素放到三维界面当中,也可以输出元素(js方式)到界面中,为了简单我自己做好标签元素然后进行提取。

引用Three.js核心代码

Three.js很丰富,其他的根据需要引用。我的引用如下

    <script src="../webgl/three.js-master/build/three.js"></script>
<script src="../webgl/three.js-master/examples/js/controls/OrbitControls.js"></script>
<script src="../webgl/three.js-master/examples/js/renderers/CSS3DRenderer.js"></script>

其中three.js是必须引用的,第二个引用是支持旋转缩放,第三个自己看名字就知道。

最后根据需要使用Three.js引擎,这个有一套固定的写法。比如初始化,渲染等等。正像其他引擎一样!

    <script type="text/javascript">
var camera, renderer, scene;
var controls;
var objects=new Array();
var thetas = new Array();
var phis = new Array();
var r = 450;
int();
animate(); function int() {
camera = new THREE.PerspectiveCamera(80, window.innerWidth / window.innerHeight, 0.1, 2000000);
camera.position.set(0,0,720);
scene = new THREE.Scene();
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var phi = Math.acos(-1 + (2 * i) / elements.length);
phis.push(phi);
var theta = Math.sqrt(elements.length * Math.PI) * phi;
thetas.push(theta);
var object = new THREE.CSS3DObject(element);
object.position.x = r * Math.cos(theta) * Math.sin(phi);
object.position.z = r * Math.sin(theta) * Math.sin(phi);
object.position.y = r * Math.cos(phi);
scene.add(object);
objects.push(object);
}
renderer = new THREE.CSS3DRenderer;
//设置大小
renderer.setSize(400, 400);
render();
document.getElementById('canvas').appendChild(renderer.domElement); var controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.target.set(0, 0, 0);
controls.update(); window.addEventListener('resize', onWindowResize, false);
controls.addEventListener('change', render);
} function render() { renderer.render(scene, camera); } function animate() { requestAnimationFrame(animate); var phi = Math.acos(-1 + (2 * i) / elements.length);
var theta = Math.sqrt(elements.length * Math.PI) * phi;
for (var i = 0; i < objects.length; i++)
{
thetas[i] += 0.001;//phis[i] -= 0.001;
objects[i].position.x = r * Math.cos(thetas[i]) * Math.sin(phis[i]);
objects[i].position.z = r * Math.sin(thetas[i]) * Math.sin(phis[i]);
objects[i].position.y = r * Math.cos(phis[i]);
//启用下面的代码,标签朝向不变,但因此不可拖拽。
//var vector = camera.position;
//vector.copy(objects[i].position - vector).multiplyScalar(1);
//objects[i].lookAt(vector); } render();
} function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(400, 400);
render();
} </script>

用js写三维引擎的代码,是不是很酷,这样就把3d的标签墙做好了,想要看看效果吗?去我的首页看看吧!

我去整理整理,把aspx文件提取一下打包成html发表下吧!

接上文!整理结束,做了简单的demo,欢迎使用!

如果你觉得内容不错的话,就请留个言,谢谢!

下载地址:请前往我的独立博客尾部下载(阅读原文)

http://songshizhao.com/blog/blogPage/98.html

使用Three.js网页引擎创建酷炫的3D效果的标签墙的更多相关文章

  1. Flutter 实现酷炫的3D效果

    老孟导读:此文讲解3个酷炫的3D动画效果. 下面是要实现的效果: Flutter 中3D效果是通过 Transform 组件实现的,没有变换效果的实现: class TransformDemo ext ...

  2. 仿智能社官网:原生JS实现简单又酷炫的3D立方体时钟

    先放一下我做的效果:https://linrunzheng.github.io/3Dclock/3Dclock/new.html 至于3D立方体怎么做这里就不在阐述了,可以看一下我之前的博客. 这里默 ...

  3. 用 Expression Blend 创建酷炫的 Button

    原文:用 Expression Blend 创建酷炫的 Button 原文:Creating "Cool" Buttons with Expression Blend Author ...

  4. 【翻译】用 Expression Blend 创建酷炫的 Button

    原文:Creating “Cool” Buttons with Expression Blend Author: Alex 在本文中,我们将考虑在Expression Blend用几种方法来创建酷炫的 ...

  5. 15个来自 CodePen 的酷炫 CSS 动画效果【下篇】

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  6. 赞!15个来自 CodePen 的酷炫 CSS 动画效果

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  7. 酷炫的3D照片墙

    今天给大家分享的案例是酷炫的3D照片墙 这个案例主要是通过 CSS3 和原生的 JS 来实现的,接下来我给大家分享一下这个效果实现的过程.博客上不知道怎么放本地视频,所以只能放两张效果截图了. 1.实 ...

  8. 【CSS进阶】试试酷炫的 3D 视角

    写这篇文章的缘由是因为看到了这个页面: 戳我看看(移动端页面,使用模拟器观看) 运用 CSS3 完成的 3D 视角,虽然有一些晕3D,但是使人置身于其中的交互体验感觉非常棒,运用在移动端制作一些 H5 ...

  9. 一分钟搞定触手app主页酷炫滑动切换效果

    代码地址如下:http://www.demodashi.com/demo/12826.html 前言: 前几天在看手机直播的时候,自己就用上了触手app.一进到主页就看上了里面页面切换的效果,自己想这 ...

随机推荐

  1. javascript window.confirm确认 取消对话框实现代码小结

    本文章讲述的三种都是基于了javascript confirm提示确认框的做法了,只是在不同的地方写哦,有需要的同学可参考一下   confirm() 方法 confirm() 方法用于显示一个带有指 ...

  2. NSNotificationCenter机制

    作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息 [[NSNotificationCenter defaultCenter]  ...

  3. Asp.net mvc 知多少(三)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  4. 【puthon基础】之str类字符串

    str类字符串是不可变对象 1.创建字符串 s1 = str() #创建一个空字符串 s2 = str("hello") #创建字符串"hello" 2.处理字 ...

  5. asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  6. 二叉搜索树Java实现(查找、插入、删除、遍历)

    由于最近想要阅读下 JDK1.8 中 HashMap 的具体实现,但是由于 HashMap 的实现中用到了红黑树,所以我觉得有必要先复习下红黑树的相关知识,所以写下这篇随笔备忘,有不对的地方请指出- ...

  7. ubuntu下包管理器apt-get常用命令

    apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-get install package ...

  8. Redis的二八定律

    常用命令: 1.setex key 有效时间 value ----------意思就是添加并设置该键值对的存活时间 2.mset key1 value1 key2 value2 key3 value3 ...

  9. HTTP协议详解【转】

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  10. JavaScript 基本类型值-Number类型

    ▓▓▓▓▓▓ 大致介绍 在JavaScript的内部采用IEEE754格式来表示数字,所以不区分整数和浮点数,都是用64位浮点数的形式储存.就是说,在JavaScript内部,就根本没有小数.但是有些 ...