JavaScript Canvas shadowOffsetX 教程
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 JavaScript 中的 Canvas shadowOffsetX 属性。此属性控制 HTML canvas 中阴影的水平偏移。掌握阴影效果对于在图形中创建深度和真实感至关重要。
基本定义
shadowOffsetX 属性指定阴影与形状的水平距离。正值将阴影向右移动,负值将其向左移动。它与 shadowColor、shadowBlur 和 shadowOffsetY 一起用于创建阴影。
默认值为 0(无水平偏移)。该属性会影响所有后续的阴影形状,直到被更改。它以像素为单位测量,并且可以是小数以实现精确的定位。
基本 shadowOffsetX 用法
此示例演示了如何创建具有水平偏移的简单阴影。
<!DOCTYPE html> <html> <head> <title>Basic shadowOffsetX</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.shadowColor = 'rgba(0, 0, 0, 0.5)'; ctx.shadowBlur = 10; ctx.shadowOffsetX = 15; ctx.fillStyle = 'blue'; ctx.fillRect(50, 50, 200, 100); </script> </body> </html>
在这个基本示例中,我们创建了一个 canvas 元素并获取其 2D 上下文。我们设置了包括 shadowOffsetX 在内的阴影属性,值为 15 像素。
阴影出现在蓝色矩形的右侧 15 像素处。shadowColor 使用 rgba 来实现透明度,shadowBlur 则使阴影边缘柔和。
负数 shadowOffsetX
此示例显示负值如何创建位于形状左侧的阴影。
<!DOCTYPE html> <html> <head> <title>Negative shadowOffsetX</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.shadowColor = 'rgba(255, 0, 0, 0.7)'; ctx.shadowBlur = 5; ctx.shadowOffsetX = -20; ctx.fillStyle = 'yellow'; ctx.beginPath(); ctx.arc(150, 100, 50, 0, Math.PI * 2); ctx.fill(); </script> </body> </html>
在这里,我们创建了一个带有红色阴影的黄色圆形,其偏移量为 20 像素向左。负的 shadowOffsetX 值会将阴影向相反方向移动。
阴影具有 70% 的不透明度和轻微的模糊效果。这展示了如何创建看起来来自右侧光源的阴影效果。
结合 shadowOffsetX 和 shadowOffsetY
此示例演示如何使用两个偏移属性创建对角线阴影。
<!DOCTYPE html> <html> <head> <title>Combined Shadow Offsets</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.shadowColor = 'rgba(0, 0, 0, 0.6)'; ctx.shadowBlur = 15; ctx.shadowOffsetX = 10; ctx.shadowOffsetY = 10; ctx.fillStyle = 'green'; ctx.fillRect(50, 50, 200, 100); </script> </body> </html>
这会创建一个绿色矩形,其阴影在水平和垂直方向上都偏移了 10 像素。组合偏移量产生了对角线阴影。
阴影看起来来自左上角的 T 角的光源。模糊效果使阴影看起来更自然、更逼真。
动态 shadowOffsetX 动画
此示例通过动画化 shadowOffsetX 属性来创建移动阴影效果。
<!DOCTYPE html> <html> <head> <title>Animated shadowOffsetX</title> </head> <body> <canvas id="myCanvas" width="400" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); let offset = 0; let direction = 1; function animate() { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.shadowColor = 'rgba(100, 100, 255, 0.8)'; ctx.shadowBlur = 20; ctx.shadowOffsetX = offset; ctx.fillStyle = 'purple'; ctx.fillRect(150, 50, 100, 100); offset += direction; if (offset > 30 || offset < -30) direction *= -1; requestAnimationFrame(animate); } animate(); </script> </body> </html>
此动画展示了一个带有蓝色阴影的紫色方形,该阴影前后移动。shadowOffsetX 值在 -30 到 30 像素之间连续变化。
动画循环在每一帧都清除并重绘 canvas。当偏移量达到极限时,方向会反转,从而产生乒乓球效果。
带 shadowOffsetX 的文本
此示例演示了将 shadowOffsetX 应用于文本以实现时尚的排版。
<!DOCTYPE html> <html> <head> <title>Text Shadow with shadowOffsetX</title> </head> <body> <canvas id="myCanvas" width="500" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); // First text with right shadow ctx.shadowColor = 'rgba(200, 0, 0, 0.7)'; ctx.shadowBlur = 5; ctx.shadowOffsetX = 8; ctx.shadowOffsetY = 3; ctx.font = '40px Arial'; ctx.fillStyle = 'white'; ctx.fillText('Hello Canvas', 50, 100); // Second text with left shadow ctx.shadowColor = 'rgba(0, 0, 200, 0.7)'; ctx.shadowOffsetX = -8; ctx.fillText('Shadow Effect', 50, 150); </script> </body> </html>
这创建了两行文本,具有不同的阴影方向。第一行文本具有向右偏移的红色阴影,而第二行文本具有向左偏移的蓝色阴影。
该示例展示了 shadowOffsetX 如何创建各种文本效果。改变偏移方向会极大地改变文本的视觉外观。
来源
在本文中,我们探索了用于在 HTML canvas 上创建水平阴影效果的 shadowOffsetX 属性。这些技术对于为 canvas 图形和文本添加深度和视觉趣味至关重要。
作者
列出 所有 JS Canvas 教程。