当前位置:首页 > JavaScript

js实现景深

2026-03-14 14:22:30JavaScript

实现景深效果的JavaScript方法

在JavaScript中实现景深效果通常涉及对图像的模糊处理,模拟相机聚焦和虚化背景的效果。以下是几种常见的方法:

使用CSS滤镜和JavaScript控制 通过CSS的filter: blur()属性结合JavaScript动态调整模糊程度,可以实现景深效果。创建一个聚焦区域,周围区域逐渐模糊。

js实现景深

.blur-effect {
  filter: blur(5px);
  transition: filter 0.3s ease;
}
document.addEventListener('mousemove', (e) => {
  const x = e.clientX / window.innerWidth;
  const y = e.clientY / window.innerHeight;
  document.querySelector('.focus-area').style.transform = `translate(${x * 10}px, ${y * 10}px)`;
});

使用WebGL和Three.js 对于更复杂的3D景深效果,可以使用Three.js库。通过设置相机的焦点和模糊参数,实现真实的景深渲染。

import * as THREE from 'three';
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';
import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';

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

const bokehPass = new BokehPass(scene, camera, {
  focus: 10,
  aperture: 0.1,
  maxblur: 0.01
});

const composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
composer.addPass(bokehPass);

使用Canvas 2D API 通过Canvas的getImageDataputImageData方法,可以手动实现模糊算法,如高斯模糊,来模拟景深。

js实现景深

function applyBlur(ctx, radius) {
  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const data = imageData.data;

  for (let i = 0; i < data.length; i += 4) {
    const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
    data[i] = avg;
    data[i + 1] = avg;
    data[i + 2] = avg;
  }

  ctx.putImageData(imageData, 0, 0);
}

优化景深效果的技巧

分层渲染 将场景分为前景、中景和背景层,分别应用不同的模糊强度。通过控制各层的透明度叠加,增强深度感。

动态焦点调整 根据用户交互或动画需求,动态调整焦点位置。例如,跟随鼠标移动或聚焦到特定元素上,增强交互性。

性能考虑 对于复杂的场景,使用WebGL或专门的图形库(如Three.js)通常比纯CSS或Canvas 2D更高效。合理设置模糊半径和采样率,避免性能瓶颈。

标签: 景深js
分享给朋友:

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…