Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
body{ margin: 0; padding: 0; } canvas{ display: block; }
JavaScript
class MathUtils { constructor() {} lerp(a, b, n) { return n * (b - a) + a; } to(obj, time, set) { const start = performance.now(); const duration = time * 1000; return new Promise(resolve => { this.opts = { obj, time, duration, start, set, resolve }; this.update(); }); } update() { const now = performance.now(); const p = (now - this.opts.start) / this.opts.duration; if (p >= 1) { this.opts.completed = true; return this.opts.resolve(); } for (let v in this.opts.set) { this.opts.obj[v] = this.lerp( this.opts.obj[v], this.opts.set[v], this.outElastic(p) ); } requestAnimationFrame(this.update); } } const init = () => { const content = document.querySelector(".content-canvas"); const shader = { v: document.querySelector("#vertex").textContent, f: document.querySelector("#fragment").textContent }; const mathUtils = new MathUtils(); const mouse = { x: 0, y: 0 }; const gl = { renderer: new THREE.WebGLRenderer(), camera: new THREE.PerspectiveCamera( 75, innerWidth / innerHeight, 0.1, 1000 ), scene: new THREE.Scene(), loader: new THREE.TextureLoader(), clock: new THREE.Clock() }; const uniforms = { u_time: { type: "f", value: 0 }, u_res: { type: "v2", value: new THREE.Vector2(innerWidth, innerHeight) }, u_mouse: { type: "v2", value: new THREE.Vector2(0, 0) } }; const addScene = () => { gl.renderer.setPixelRatio(devicePixelRatio); gl.renderer.setSize(innerWidth, innerHeight); gl.camera.position.z = 5; content.append(gl.renderer.domElement); gl.scene.add(gl.camera); }; const addMesh = () => { const geometry = new THREE.PlaneGeometry(1, 1); const material = new THREE.ShaderMaterial({ uniforms: uniforms, vertexShader: shader.v, fragmentShader: shader.f }); gl.mesh = new THREE.Mesh(geometry, material); gl.scene.add(gl.mesh); }; let elapsed = 0; const update = e => { elapsed = gl.clock.getElapsedTime(); uniforms.u_time.value = elapsed; uniforms.u_mouse.value.x = mathUtils.lerp( uniforms.u_mouse.value.x, mouse.x, 0.05 ); uniforms.u_mouse.value.y = mathUtils.lerp( uniforms.u_mouse.value.y, mouse.y, 0.05 ); render(); requestAnimationFrame(update); }; const resize = () => { const w = innerWidth; const h = innerHeight; gl.renderer.setSize(w, h); gl.camera.aspect = w / h; // calculate scene const dist = gl.camera.position.z - gl.mesh.position.z; const height = 1; gl.camera.fov = 2 * (180 / Math.PI) * Math.atan(height / (2 * dist)); if (w / h > 1) { gl.mesh.scale.x = gl.mesh.scale.y = 1.05 * w / h; } gl.camera.updateProjectionMatrix(); }; const render = () => { gl.renderer.render(gl.scene, gl.camera); }; addScene(); addMesh(); update(); resize(); window.addEventListener("resize", resize); window.addEventListener("mousemove", ({ clientX, clientY }) => { mouse.x = clientX; mouse.y = innerHeight - clientY ; }); }; init();
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>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号