style.css
canvas { margin: 0px; padding: 0px; background-color: #000; }
body {margin: 0px; padding: 0px; background-color: #111111; }
index.js
var container, camera, scene, renderer, group, particle;
var mouseX = 0, mouseY = 0;
var w = window.innerWidth;
var h = window.innerHeight;
init();
animate();
function init() {
container = document.createElement( ‘div’ );
document.body.appendChild( container );
camera = new THREE.PerspectiveCamera( 75, w / h, 1, 3000 );
camera.position.z = 1000;
scene = new THREE.Scene();
var PI2 = Math.PI * 2;
var program = function ( context ) {
context.beginPath();
context.arc( 0, 0, 1, 0, PI2, true );
context.closePath();
context.fill();
}
group = new THREE.Object3D();
scene.add( group );
var t = new THREE.TorusGeometry( 450, 250, 12, 12, PI2);
for ( var i = 0; i < t.vertices.length; i++ ) {
particle = new THREE.Particle(
new THREE.ParticleCanvasMaterial( { color: 0xEA80B0, program: program } ) );
particle.position.x = 0;
particle.position.y = 0;
particle.position.z = 0;
particle.scale.x = particle.scale.y = 10;
y:t.vertices[i].y,z:t.vertices[i].z,ease:Power2.easeInOut,delay:((i + 1)/10)});
makeTween(particle.position,i,t.vertices[i].x,t.vertices[i].y,t.vertices[i].z,i+60);
group.add( particle );
}
renderer = new THREE.CanvasRenderer();
renderer.setSize( w, h );
container.appendChild( renderer.domElement );
document.addEventListener( ‘mousemove’, onDocumentMouseMove, false );
document.addEventListener( ‘touchstart’, onDocumentTouchStart, false );
document.addEventListener( ‘touchmove’, onDocumentTouchMove, false );
window.addEventListener( ‘resize’, onWindowResize, false );
}
function onWindowResize() {
w = window.innerWidth;
h = window.innerHeight;
camera.aspect = w/h;
camera.updateProjectionMatrix();
renderer.setSize( w, h );
}
function onDocumentMouseMove( event ) {
mouseX = event.clientX - w/2;
mouseY = event.clientY - h/2;
}
function onDocumentTouchStart( event ) {
if ( event.touches.length === 1 ) {
event.preventDefault();
mouseX = event.touches[ 0 ].pageX - w/2;
mouseY = event.touches[ 0 ].pageY - h/2;
}
}
function onDocumentTouchMove( event ) {
if ( event.touches.length === 1 ) {
event.preventDefault();
mouseX = event.touches[ 0 ].pageX - w/2;
mouseY = event.touches[ 0 ].pageY - h/2;
}
}
function animate() {
requestAnimationFrame( animate );
render();
}
function render() {
camera.position.x += ( mouseX - camera.position.x ) * 0.05;
camera.position.y += ( - mouseY - camera.position.y ) * 0.05;
camera.lookAt( scene.position );
group.rotation.x += 0.01;
group.rotation.y += 0.02;
renderer.render( scene, camera );
}
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
ndroid开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!