如果你想实现一个模型或标签的淡入淡出效果,可以同过tweenjs控制模型或标签的透明度轻松实现。

Tweenjs回调函数

twwenjs库提供了 onStart onUpdate onComplete 等用于控制动画执行的回调函数。

  • onStart :动画开始执行触发
  • onUpdate :动画执行过程中,一直被调用执行
  • onComplete :动画正常执行完触发

.onUpdate(function(obj){}) 结构中,obj对应的是 new TWEEN.Tween(pos) 的参数对象pos。

const tween = new TWEEN.Tween(pos).to({x: 0}, 4000)
// 开始执行:动画片段tween开始执行的时候触发onStart
.onStart(function(obj){
// 模型淡入
material.transparent = true;//开启透明计算
material.opacity = 0.0;//完全透明
// new TWEEN.Tween(material)
new TWEEN.Tween({opacity:material.opacity})
.to({opacity:1.0}, 3000)
.onUpdate(function(obj){
    material.opacity = obj.opacity
.onComplete(function(){
    //动画结束:关闭允许透明,恢复到模型原来状态
    material.transparent = false;
.start();
// 模型淡出
// new TWEEN.Tween(material)
new TWEEN.Tween({opacity:material.opacity})
.to({opacity:0.0}, 3000)
.onStart(function(){
    //动画开始:允许透明opacity属性才能生效
    material.transparent = true;
.onUpdate(function(obj){
    material.opacity = obj.opacity
.start();

模型HTML标签淡入淡出

three.js三维场景中的HTML元素标签淡入淡出和mesh对象淡入淡出类似操作。

单击模型弹出的标签淡入,而不是突然出现。

// HTML元素标签
const divTag = document.getElementById('tag');
const intersects = raycaster.intersectObjects(cunchu.children);
console.log('intersects', intersects);
if (intersects.length > 0) {
    // 通过.ancestors属性判断那个模型对象被选中了
    outlinePass.selectedObjects = [intersects[0].object.ancestors];
    //tag会标注在intersects[0].object.ancestors模型的局部坐标系原点位置
    intersects[0].object.ancestors.add(tag);
    span.innerHTML = intersects[0].object.ancestors.name; //修改标签数据
   // 标签淡出
    new TWEEN.Tween({opacity:0})
    .to({opacity:1.0}, 1000)
    .onUpdate(function(obj){
        //动态更新div元素透明度
        divTag.style.opacity = obj.opacity;
    .start();

原来代码,单击按钮,直接关闭标签。

// 鼠标单击按钮,关闭HTML标签
document.getElementById('close').addEventListener('click', function () {
    if (chooseObj) { //把原来选中模型对应的标签和发光描边隐藏
        outlinePass.selectedObjects = []; //无发光描边
        chooseObj.remove(tag); //从场景移除

关闭模型标签淡出,逐渐消失。

// 鼠标单击按钮,关闭HTML标签
document.getElementById('close').addEventListener('click', function () {
    if (chooseObj) { //把原来选中模型对应的标签和发光描边隐藏
        outlinePass.selectedObjects = []; //无发光描边
        // chooseObj.remove(tag); //从场景移除
        new TWEEN.Tween({opacity: 1})
            .to({opacity: 0}, 400)
            .onUpdate(function (obj) {
                //动态更新div元素透明度
                divTag.style.opacity = obj.opacity;
            .onComplete(function(){
                // 动画结束再从场景中移除标签
                chooseObj.remove(tag); //从场景移除
            .start();   
	<title>erath - three.js</title>
	<script src="js/three.min.js"></script>
	<script src="js/TrackballControls.js"></script>
				
编辑关键帧并解析播放 本文是Three.js电子书的11.1节 Threejs提供了一系列用户编辑和播放关键帧动画的API,例如关键帧KeyframeTrack、剪辑AnimationClip、操作AnimationAction、混合器AnimationMixer。 帧动画帧动画应用编辑播放骨骼动画、变形目标动画、淡入淡出等位置、颜色等属性随着时间变化离散时间点对应离散属性值关键帧Keyframe...
// 新建一个AnimationMixer, 并取得AnimationClip实例列表 var mixer = new THREE.AnimationMixer( mesh );
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。