很早就有人做3D网页版的化学元素周期表了,酷炫效果和新鲜技巧一度被众多粉丝奉为神明,争相研究和效仿。甚至有人放弃一切扑向这颗蜡烛,不由总是想到那个OPPO广告女主角拽拽的鄙视道:“辞职去旅游!你敢吗?”
俺不敢,不过用TWaver做一个也没用几个小时。所以就老在想:不就旅个游么,至于嘛?
这个3D元素周期表做了一些改进:卡片上增加了汉字及拼音读音,原因你懂得——各位程序猿没几个敢大声读这些汉字的。还好每个字的主要部分还大都认识,多少可以小声蒙一下,加上拼音就少了许多尴尬。另外在形状布局和特效上也丰富了一点,具体可以看下方视频连接。
技术上来说,用TWaver 3D来做的思路略有不同。最开始网上这个程序是使用HTML5、CSS3、WebGL、THREE.js、TWEEN.js等技术做的。使用TWaver就不用这么麻烦了,直接一个mono.js就差不多搞定了。技术上依旧是WebGL+js,但没有使用CSS3和其他框架。效果和效率都很好。
实现上难度不大,大概思路如下:
- 用数组定义好化学元素周期表的数据。包括编号、汉字、拼音、数值、英文等等。然后在内存中动态生成每个元素对应的图片卡,并转成base64格式的内存url字符串。注意图片的格式、透明度、颜色等细节;
- 为每个化学元素new一个3D立方体,并把内存图片贴图到立方体正面。立方体的厚度0就行了,其他面都透明即可;
- 监听鼠标事件。当鼠标over每个物体时,让立方体发光;点击物体时,让立方体动画反转一圈;
- 计算好几个形状布局对应的空间坐标,并事先记录到每个立方体的client属性表中。例如:node.setClient(‘grid’,{x:100,y:340});
- 放几个按钮,每个按钮点击后,让所有的立方体到对应的形状的位置上去,同时启用动画机制;
实际代码中,也要留意一些注意事项:
- 动画:当第一次动画尚未执行完毕,用户又点击其他按钮执行新动画时,需要先判断当前有无正在运行的动画,并及时让动画停止。同时还要判断是否需要把数值恢复成初始值或动画正常结束所设定的值。这里如不仔细处理,可能会导致动画将卡片的位置、角度错乱。
- 布局:球形、螺旋、随机等空间点其实都很好计算。尤其球形布局,开始大家可能会去寻找“在一个半径为r的球形表面均匀散布n个点,求每个点的坐标?”这样的题目。这样就把问题复杂化了。因为简单的视觉布局并不需要特别严谨的位置数值,所以大致把球进行径向和横向切片进行数值插入即可;
- 贴图:最开始,我们可能会觉得程序是使用了100张小图片进行贴图。但实际上,由于每个卡片的区别仅仅是文字,所以完全可以在内存动态生成。这样速度快节省了网络下载图片的时间以及维护图片的麻烦,同时文字和图片等样式也更容易控制。这也都是HTML5的canvas技术为大家带来的好处。
- 物体朝向:在布局过程中,每个卡片的旋转和朝向是一个要考虑的问题。例如球形,每个卡片要面向球形圆心发射线的外方向,螺旋形卡片则朝向水平外方向,等等。计算这些坐标和角度需要很多数学运算,光是求坐标系和直角坐标系转换之类的就够大家忙活一阵子了。而用TWaver就简单了:每个物体直接lookAt一个点就行了。例如球形卡片,每帧动画只要执行:node.lookAt(0,0,0)就行了,对吗?还不完全对。这样lookAt到中心点,不就“屁股”朝外了吗?用户看到的字是卡片的背面,是反的。要解决也简单,应当让它lookAt自己坐标两倍的地方,也就是圆心放射线的外面:node.lookAt(x*2, y*2, z*2),这样就对了。
- 发光。鼠标over每个物体,都会看到发光。而鼠标over在光晕位置,却不会触发over事件。这是怎么做到的呢?其实也是小技俩,大家可以看看程序,自己研究吧。
生成内存图片代码片段:
1 |
var url = canvas.toDataURL( "image/png" );
|
2 |
node.setStyle( 'front.m.texture.image' ,url);
|
球形布局坐标计算代码片段:
1 |
var radius= 1000 ;
|
2 |
var phi = Math.acos( - 1 + ( 2 * index ) / total );
|
3 |
var theta = Math.sqrt( total * Math.PI ) * phi; |
4 |
var x = radius * Math.cos( theta ) * Math.sin( phi ); |
5 |
var y = radius * Math.sin( theta ) * Math.sin( phi ); |
6 |
var z = radius * Math.cos( phi ); |
程序和源代码都已经在TWaver的MONO DESIGN产品中,感兴趣的朋友可以登录在线网址www.mono-design.cn或下载产品包。赶紧试试吧!
相关推荐
在3D元素周期表中,JQuery被用来处理用户的交互事件,如鼠标点击、滚动和拖拽,使得用户可以自由旋转、放大周期表,仿佛亲手操作一个真实的化学实验室模型。同时,JQuery的动画效果使得元素周期表的转换流畅自然,...
化学元素周期表中文版-2024年更新至最新-PDF可高清打印
在实际应用中,3D元素周期表不仅可以作为教育工具,帮助学生更直观地理解元素周期性的规律,还可以激发他们对化学的兴趣。同时,对于化学教师来说,这种交互式的学习资源可以提高课堂的互动性,提升教学效果。 总的...
HTML化学元素周期表是一种利用网页技术来展示化学元素周期性的互动工具。这个压缩包"HTML化学元素周期表.zip"包含了两个关键文件:"说明.htm"和"HTML化学元素周期列表",它们共同构建了一个功能丰富的JavaScript实现...
化学元素周期表是1869年俄国科学家门捷列夫(Dmitri Mendeleev)首创的,他将当时已知的63种元素依原子量大小并以表的形式排列,把有相似化学性质的元素放在同一行,就是元素周期表的雏形,在周期表中,元素是以元素的...
2. 化学元素周期表:化学元素周期表是化学领域中用于展示元素之间关系的一种图表,它按照原子序数递增的顺序排列,且根据元素的电子层结构和化学性质把它们分为若干个周期和族。元素周期表是化学、物理学、材料科学...
"BatFor_3D元素周期表.zip"是一个创新性的项目,它将化学元素周期表与前沿的Web技术相结合,为用户带来了全新的学习体验。这个项目不仅是一个实用的教学工具,更是一个展示JavaScript(Js)和three.js库强大功能的...
在本文中,我们将深入探讨如何使用Qt和C++来实现一个功能丰富的元素周期表应用。Qt是一个跨平台的C++图形用户界面库,它提供了一系列工具和类,用于创建直观、美观的桌面和移动应用程序。C++则是一种强大的编程语言...
化学元素周期表exe版本,使用更方便。
适合所有人
HTML5元素周期表是一种利用HTML5、JavaScript和CSS技术创建的交互式网页,它将化学元素周期表的概念与Web开发的元素相结合,为用户提供了炫酷的视觉体验和丰富的交互功能。这个项目展示了HTML5的新特性,如语义化...
化学元素周期表是根据核电荷数从小至大排序的化学元素列表。列表大体呈长方形,某些元素周期中留有空格,使特性相近的元素归在同一族中,如碱金属元素、碱土金属、卤族元素、稀有气体等。这使周期表中形成元素分区且...
Excel版元素周期表,可打印
3D动态变化的元素周期表是一款创新的交互式学习工具,它利用先进的JavaScript技术将传统的化学元素周期表以三维立体的形式呈现出来,带给用户全新的视觉体验。这款软件支持多种展示模式,包括球形、圆柱形和平面模式...
分享一个超高级的元素周期表页面html源码,如果不显示自行替换里面JS文件
这个3D元素周期表特效可以应用于教育软件、在线学习平台、科学博物馆的互动展示,甚至可以作为科普教育工具,帮助学生和公众更好地理解和记忆复杂的化学知识。同时,对于前端开发者而言,它也是一份宝贵的学习资料,...
元素周期表是化学科学中一个极为重要的工具,它按照原子序数(即核内质子数)递增的顺序排列了所有已知的化学元素,并根据元素的化学性质将它们分组到不同的族和周期之中。这种排列方式揭示了元素间内在的联系以及...