赞
踩
参考资料:threejs中文网
threejs qq交流群:814702116
如果你想实现一个模型或标签的淡入淡出效果,可以同过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();
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(); } })
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。