当前位置:首页 > JavaScript

js实现阴影

2026-04-06 20:18:33JavaScript

使用 CSS 属性实现阴影

在 JavaScript 中可以通过直接操作元素的 style 属性来添加阴影效果。CSS 提供了 box-shadowtext-shadow 两种阴影属性。

// 为元素添加盒子阴影
element.style.boxShadow = '10px 10px 5px grey';

// 为文本添加阴影
element.style.textShadow = '2px 2px 4px #000000';

box-shadow 语法格式:

offset-x | offset-y | blur-radius | spread-radius | color

动态生成阴影效果

可以通过 JavaScript 动态计算阴影参数实现交互效果:

document.addEventListener('mousemove', (e) => {
    const x = e.clientX / window.innerWidth * 20;
    const y = e.clientY / window.innerHeight * 20;
    element.style.boxShadow = `${x}px ${y}px 10px rgba(0,0,0,0.5)`;
});

使用 Canvas 绘制阴影

Canvas API 提供了更灵活的阴影控制:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 5;
ctx.shadowOffsetY = 5;

ctx.fillStyle = 'blue';
ctx.fillRect(20, 20, 100, 80);

SVG 阴影效果

通过 JavaScript 操作 SVG 元素添加阴影滤镜:

const svg = document.querySelector('svg');
const filter = document.createElementNS('http://www.w3.org/2000/svg', 'filter');
filter.setAttribute('id', 'drop-shadow');
filter.setAttribute('height', '130%');

const feGaussianBlur = document.createElementNS('http://www.w3.org/2000/svg', 'feGaussianBlur');
feGaussianBlur.setAttribute('in', 'SourceAlpha');
feGaussianBlur.setAttribute('stdDeviation', '3');

filter.appendChild(feGaussianBlur);
svg.appendChild(filter);

const rect = document.querySelector('rect');
rect.setAttribute('filter', 'url(#drop-shadow)');

性能优化技巧

频繁修改阴影属性会影响性能,可以考虑以下优化方案:

js实现阴影

  • 使用 will-change: box-shadow 提前告知浏览器
  • 对静态元素使用 CSS 类而不是直接修改 style
  • 在 Canvas 中批量绘制带阴影的元素
  • 对动画元素使用 transform 代替位置变化

标签: 阴影js
分享给朋友:

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…