运动效果
在之前的 three.js 运动效果制作时可以通过移动相机和移动物体来产生动画的效果。
在实际中开发中,移动相机和移动物体是在渲染循环里去移动相机或者物体的位置。如果动画稍微复杂一些,这种方式实现起来就比较麻烦一些了。
这时候就又要学新东西了,比如说——动画引擎......
<br/>
(吐槽:我是从工作需求中因为 IE 浏览器兼容性放弃了 CSS animation 动画,然后去用 canvas 解决了问题。之后就对这个有兴趣 ,开始学起来,学了 canvas 之后,又发现 three.js,然后才开始学就发现好的效果用动画引擎比较好,发现了 Tween.js,一比较觉得 TweenMax 更流畅,然后就...只能学了,都给我学(◔‸◔))
TweenMax 官网:https://www.tweenmax.com.cn/
有关 TweenMax 引入以及使用方法:https://www.tweenmax.com.cn/start/init/
使用方法
1、加载 TweenMax 文件
与所有的前端插件一样,必须要加载核心工具 TweenLite.min.js 或者 TweenMax.min.js。
TweenMax 其他的还有一些相应的插件,如下。加载了相应的插件后即可使用相应的功能。
<script src="js/greensock-js/TweenLite.min.js"> </script> -- 核心工具,可初始化TweenLite对象
<script src="js/greensock-js/plugins/CSSPlugin.min.js"> </script> -- 基础插件,用于制作CSS动画2D,3D动画
<script src="js/greensock-js/plugins/BezierPlugin.min.js"> </script> -- 基础插件,用于制作贝塞尔曲线
<script src="js/greensock-js/TimelineLite.min.js"> </script> -- 核心工具,创建时间轴管理动画
<script src="js/greensock-js/easing/EasePack.min.js"> </script> -- 拓展的时间曲线,例如bounce
复制代码
建议在开发中使用 TweenMax 这个全功能的 js 文件,它包括了 GreenSock 动画平台的大部分核心功能。
使用 TweenMax 上面的加载可以简约为:
<script src="js/greensock-js/TweenMax.min.js"> </script>
复制代码
2、制作动画
动画的三要素:
1. 动画目标对象
2. 动画的持续时间
3. 变化的属性
和 Three 配合使用示例:
TweenMax 中移动采用了 onUpdate 去改变
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TweenMax学习</title>
<script src="../js/three.js" type="text/javascript" charset="utf-8"></script>
<script src="Js/TweenMax.min.js" type="text/javascript" charset="utf-8"></script>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="app"></div>
<script type="text/javascript">
var scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(105, window.innerWidth / window.innerHeight, 1, 1000);
render = new THREE.WebGLRenderer({
antialias: true
});
render.setPixelRatio(window.devicePixelRatio);
render.setSize(window.innerWidth, window.innerHeight)
var app = document.getElementById("app");
app.appendChild(render.domElement);
/*****************************************************************/
var geometry = new THREE.CylinderGeometry(10, 10, 20, 15);
var material3 = new THREE.MeshBasicMaterial({
color: 0xffff00,
});
var meshs = new THREE.Mesh(geometry, material3);
// 创建物体的边框线
var geoEdges = new THREE.EdgesGeometry(geometry, 1);
var edgesMtl = new THREE.LineBasicMaterial({color: 0xff0000});
var geoLine = new THREE.LineSegments(geoEdges, edgesMtl);
meshs.add(geoLine);
scene.add(meshs);
camera.position.z = 40;
camera.position.y = 20;
camera.position.x = 0;
render.render(scene, camera);
/*****************************************************************/
// 产生动效
var TweenMax = new TimelineMax(); // 必须创建对象
// 参数: 指定的目标obj
TweenMax.to(meshs.position, 3, {
onUpdate:function(){
meshs.position.y += 0.3;
if(meshs.position.y > 25) {
meshs.position.z -= 0.3;
}
},
});
// 重复一次上面步骤,因为只用了onUpdate,所以相当于将时间延长3秒
// TweenMax.repeat(1);
function animate(){
render.render(scene, camera);
window.requestAnimationFrame(animate);
}
animate();
</script>
</body>
</html>
复制代码
效果:
评论