Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
Click anywhere
css
body { background: #3E4777; overflow: hidden; margin: 0; } .instructions { position: absolute; top: 20px; right: 20px; letter-spacing: 0.2em; font-size: 18px; color: white; }
JavaScript
(function() { var Particles, bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; Particles = (function() { function Particles() { this.render = bind(this.render, this); this.rotateRadians = bind(this.rotateRadians, this); this.random = bind(this.random, this); this.mouseMove = bind(this.mouseMove, this); this.mouseDown = bind(this.mouseDown, this); this.resize = bind(this.resize, this); this.animate = bind(this.animate, this); this.setStage = bind(this.setStage, this); this.setLighting = bind(this.setLighting, this); this.getTexture = bind(this.getTexture, this); this.addStars = bind(this.addStars, this); this.setActors = bind(this.setActors, this); this.getPastelColor = bind(this.getPastelColor, this); this.canvasMouse = { x: 0, y: 0, z: 0, px: 0, py: 0, py: 0, vx: 0, vy: 0, pressed: false }; this.colors = ['#da6b00', '#8555d4', '#4ad3b5', '#ffffff']; this.particleCount = 500; this.initialRadius = 0.1; this.movementSpeed = 2; this.directions = []; this.starSystems = []; this.systemCount = 1; this.setStage(); this.setLighting(); this.setActors(); setInterval((function(_this) { return function() { _this.systemCount++; return _this.addStars(_this.getPastelColor(), 0, 0); }; })(this), 5000); this.animate(); this.render(); } Particles.prototype.getPastelColor = function() { this.col = new THREE.Color("hsl(" + (this.random(0, 360)) + ", " + (Math.floor(25 + 70 * Math.random())) + "%, " + (Math.floor(85 + 10 * Math.random())) + "%)"); return "#" + (this.col.getHexString()); }; Particles.prototype.setActors = function() { return this.addStars(this.getPastelColor(), 0, 0); }; Particles.prototype.addStars = function(color, x, y) { var angle, i, k, radiusSQ, ref, vertex; this.dirs = []; this.geometry = new THREE.Geometry(); this.materials = new THREE.PointsMaterial({ color: color, size: 1, transparent: true, blending: THREE.AdditiveBlending, map: this.getTexture(color), depthTest: false }); for (i = k = 0, ref = this.particleCount; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { angle = Math.random() * 2 * Math.PI; radiusSQ = Math.random() * this.initialRadius * this.initialRadius; vertex = new THREE.Vector3(); vertex.x = x; vertex.y = y; vertex.z = 0; this.dirs.push({ x: (Math.random() * this.movementSpeed) - (this.movementSpeed / 2), y: (Math.random() * this.movementSpeed) - (this.movementSpeed / 2), z: (Math.random() * this.movementSpeed) - (this.movementSpeed / 2) }); this.geometry.vertices.push(vertex); } this.starSystem = new THREE.Points(this.geometry, this.materials); this.starSystem.sortParticles = true; this.directions.push(this.dirs); this.starSystems.push(this.starSystem); return this.scene.add(this.starSystem); }; Particles.prototype.getTexture = function(color) { var canvas, context, gradient, texture; canvas = document.createElement('canvas'); canvas.width = 32; canvas.height = 32; context = canvas.getContext('2d'); gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2); gradient.addColorStop(0, 'rgba(255,255,255,1)'); gradient.addColorStop(0.2, color); gradient.addColorStop(0.4, color); gradient.addColorStop(1, 'rgba(0,0,0,1)'); context.fillStyle = gradient; context.fillRect(0, 0, canvas.width, canvas.height); texture = new THREE.Texture(canvas); texture.needsUpdate = true; return texture; }; Particles.prototype.setLighting = function() { this.ambientLight = new THREE.AmbientLight("#ffffff", 0.5); return this.scene.add(this.ambientLight); }; Particles.prototype.setStage = function() { this.renderer = new THREE.WebGLRenderer({ canvas: document.getElementById("canvas"), antialias: true }); this.renderer.setPixelRatio(window.devicePixelRatio); this.renderer.autoClear = false; this.renderer.setSize(window.innerWidth, window.innerHeight); this.scene = new THREE.Scene(); this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000); this.camera.position.z = 50; this.stats = new Stats(); this.stats.setMode(0); this.stats.domElement.style.position = 'absolute'; this.stats.domElement.style.left = '0px'; this.stats.domElement.style.top = '0px'; document.getElementById("stats").appendChild(this.stats.domElement); window.addEventListener('resize', this.resize, false); window.addEventListener('mousemove', this.mouseMove, false); return window.addEventListener("mousedown", this.mouseDown); }; Particles.prototype.animate = function() { var i, j, k, l, particle, ref, ref1; for (j = k = 0, ref = this.systemCount - 1; 0 <= ref ? k <= ref : k >= ref; j = 0 <= ref ? ++k : --k) { for (i = l = 0, ref1 = this.particleCount; 0 <= ref1 ? l < ref1 : l > ref1; i = 0 <= ref1 ? ++l : --l) { particle = this.starSystems[j].geometry.vertices[i]; particle.x += this.directions[j][i].x; particle.y += this.directions[j][i].y; particle.z += this.directions[j][i].z; } this.starSystems[j].geometry.verticesNeedUpdate = true; } this.stats.update(); this.render(); return requestAnimationFrame(this.animate); }; Particles.prototype.resize = function() { this.camera.aspect = window.innerWidth / window.innerHeight; this.camera.updateProjectionMatrix(); this.renderer.setSize(window.innerWidth, window.innerHeight); return this.render(); }; Particles.prototype.mouseDown = function() { this.systemCount++; return this.addStars(this.getPastelColor(), this.canvasMouse.x, this.canvasMouse.y); }; Particles.prototype.mouseMove = function() { this.canvasMouse.px = this.canvasMouse.x; this.canvasMouse.py = this.canvasMouse.y; this.canvasX = (event.clientX / window.innerWidth) * 2 - 1; this.canvasY = -(event.clientY / window.innerHeight) * 2 + 1; this.vector = new THREE.Vector3(this.canvasX || 0, this.canvasY || 0, 0); this.vector.unproject(this.camera); this.dir = this.vector.sub(this.camera.position).normalize(); this.distance = -this.camera.position.z / this.dir.z; return this.canvasMouse = this.camera.position.clone().add(this.dir.multiplyScalar(this.distance)); }; Particles.prototype.random = function(min, max) { return Math.floor(Math.random() * max) + min; }; Particles.prototype.rotateRadians = function(deg) { return deg * (Math.PI / 180); }; Particles.prototype.render = function() { return this.renderer.render(this.scene, this.camera); }; return Particles; })(); new Particles; }).call(this);
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>3D 烟花 - three.js-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号