Threejs实现波动热点效果,波动标记,波动标签显示

简介: Threejs实现波动热点效果,波动标记,波动标签显示

1,介绍


该示例使用Three.js库 r141版本。

主要实现功能:使用Three.js实现波动热点效果,两种方式。

方式一:Sprite精灵+缩放动画实现。

方式二:CSS2DRenderer,CSS 3D渲染器实现

效果图如下:




这里需要引入的js库


import * as THREE from 'three';
import {
  OrbitControls
} from './libs/jsm/OrbitControls.js';
import {
  CSS2DRenderer,
  CSS2DObject
} from './libs/jsm/CSS2DRenderer.js';
import {
  TWEEN
} from './libs/jsm/tween.module.min.js';


Sprite精灵+缩放动画实现,这里用到了Tween.js


const map = new THREE.TextureLoader().load("assets/textures/hotspot.png");
const material = new THREE.SpriteMaterial({
  map: map
});
const sprite = new THREE.Sprite(material);
sprite.scale.set(0.3, 0.3, 0.3);
sprite.position.set(1.5, 0.8, 0.2);
scene.add(sprite);
const spriteTween = new TWEEN.Tween({
  scale: 0.2
}).to({
  scale: 0.13
}, 1500).easing(TWEEN.Easing.Quadratic.Out);
spriteTween.onUpdate(function(that) {
  sprite.scale.set(that.scale, that.scale, that.scale);
});
spriteTween.yoyo(true);
spriteTween.repeat(Infinity);
spriteTween.start();


CSS2DRenderer方式实现

波动css样式代码

.status {
  width: 30px;
  height: 30px;
  position: relative;
}
.solid {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 999;
  left: 0;
  top: 0;
  background: #fff;
  border-radius: 100%;
}
.status .animate1,
.status .animate2 {
  background: #fff;
  width: 30px;
  height: 30px;
  border-radius: 100%;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 1;
}
@keyframes circle {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
  100% {
    -webkit-transform: scale(1.8);
    transform: scale(1.8);
    opacity: 0.1;
  }
}
.status .animate1 {
  -webkit-animation: circle 2s 0s ease-out infinite running;
  animation: circle 2s 0s ease-out infinite running;
}
.status .animate2 {
  -webkit-animation: circle 2s 1s ease-out infinite running;
  animation: circle 2s 1s ease-out infinite running;
}


实现标签js代码


const waves = document.createElement('div');
waves.className = 'status';
const solid = document.createElement('div');
solid.className = 'solid';
const animate1 = document.createElement('div');
animate1.className = 'animate1';
const animate2 = document.createElement('div');
animate2.className = 'animate2';
waves.appendChild(solid);
waves.appendChild(animate1);
waves.appendChild(animate2);
const wavesLabel = new CSS2DObject(waves);
wavesLabel.position.set(1, 0.8, 0.2);
scene.add(wavesLabel);
目录
相关文章
Threejs实现模拟管道液体流动
Threejs实现模拟管道液体流动
3112 0
Threejs实现模拟管道液体流动
|
JavaScript
Threejs实现标签,自定义样式显示标签
Threejs实现标签,自定义样式显示标签
1799 0
Threejs实现标签,自定义样式显示标签
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs实现模拟河流,水面水流,水管水流,海面
3212 0
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
1877 0
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
|
定位技术
Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标
Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标
2120 0
Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标
Threejs实现天空盒,全景场景,地面草地
Threejs实现天空盒,全景场景,地面草地
1734 0
Threejs实现天空盒,全景场景,地面草地
|
开发框架
threejs做特效:实现物体的发光效果-EffectComposer详解!
【8月更文挑战第7天】实现物体的发光效果-EffectComposer详解!
1929 6
threejs做特效:实现物体的发光效果-EffectComposer详解!
|
12月前
threeJs用精灵模型Sprite实现下雨效果
这篇文章介绍了使用Three.js中的Sprite(精灵)模型来实现下雨特效的方法和技术细节。
432 2
threeJs用精灵模型Sprite实现下雨效果
|
存储 开发框架 JavaScript
Threejs中三维物体和HTML的爱恨情仇:CSS2DRenderer
【8月更文挑战第7天】Threejs中三维物体和HTML的爱恨情仇:CSS2DRenderer
1087 4
Threejs中三维物体和HTML的爱恨情仇:CSS2DRenderer
|
12月前
|
前端开发
ThreeJs通过canvas和Sprite添加标签
这篇文章介绍了在Three.js中利用Canvas和Sprite实现动态文本标签的方法,使得标签可以跟随模型并在3D空间中始终保持面向摄像机。
510 0
ThreeJs通过canvas和Sprite添加标签