当前位置:首页 > JavaScript

js实现流体

2026-02-01 18:20:35JavaScript

流体动画实现方法

使用JavaScript实现流体效果通常涉及Canvas或WebGL技术,以下是两种常见方法:

js实现流体

Canvas 2D方法 创建基于Canvas的流体模拟需要借助物理算法和粒子系统:

js实现流体

const canvas = document.getElementById('fluidCanvas');
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

const particles = [];
for (let i = 0; i < 100; i++) {
  particles.push({
    x: Math.random() * canvas.width,
    y: Math.random() * canvas.height,
    size: Math.random() * 5 + 2,
    speedX: Math.random() * 3 - 1.5,
    speedY: Math.random() * 3 - 1.5
  });
}

function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  particles.forEach(particle => {
    particle.x += particle.speedX;
    particle.y += particle.speedY;

    if(particle.x < 0 || particle.x > canvas.width) {
      particle.speedX *= -1;
    }
    if(particle.y < 0 || particle.y > canvas.height) {
      particle.speedY *= -1;
    }

    ctx.beginPath();
    ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);
    ctx.fillStyle = 'rgba(0, 150, 255, 0.5)';
    ctx.fill();
  });

  requestAnimationFrame(animate);
}
animate();

WebGL方法 使用WebGL实现更高效的流体效果需要着色器编程:

import * as THREE from 'three';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

const geometry = new THREE.PlaneGeometry(10, 10, 128, 128);
const material = new THREE.ShaderMaterial({
  uniforms: {
    time: { value: 0 }
  },
  vertexShader: `
    varying vec2 vUv;
    void main() {
      vUv = uv;
      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
    }
  `,
  fragmentShader: `
    uniform float time;
    varying vec2 vUv;
    void main() {
      vec2 p = vUv * 10.0;
      float intensity = sin(p.x - time) * cos(p.y + time);
      gl_FragColor = vec4(0.0, intensity * 0.5, 1.0, 1.0);
    }
  `
});

const plane = new THREE.Mesh(geometry, material);
scene.add(plane);
camera.position.z = 5;

function animate() {
  requestAnimationFrame(animate);
  material.uniforms.time.value += 0.05;
  renderer.render(scene, camera);
}
animate();

性能优化技巧

降低粒子数量或使用Web Workers进行离屏计算可以提升性能。对于移动设备,建议减少画布分辨率或使用更简单的着色器。

第三方库推荐

  • Three.js:适合3D流体效果
  • p5.js:简化Canvas操作
  • Matter.js:物理引擎支持
  • GPU.js:加速GPU计算

这些方法可以根据项目需求进行组合或调整,实现从简单到复杂的各种流体视觉效果。

标签: 流体js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…