当前位置:首页 > 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 语法格式:

js实现阴影

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 提供了更灵活的阴影控制:

js实现阴影

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)');

性能优化技巧

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

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

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

相关文章

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…