赞
踩
本文章适合人群:
本文章较为简单,大佬可略过
一个跟随着鼠标移动的圆圈。
要实现一个动态手电筒效果,我们可以使用Canvas来绘制一个黑色的遮罩层,并通过鼠标或触摸事件来控制光圈的位置和大小。 首先,我们需要在HTML中创建一个Canvas元素和一个用于控制光圈的滑块。
<canvas id="flashlightCanvas"></canvas>
<input type="range" id="lightSize" min="50" max="200" value="100">
接下来,在JavaScript中获取Canvas元素和滑块的引用,并设置Canvas的宽度和高度。
const canvas = document.getElementById("flashlightCanvas");
const ctx = canvas.getContext("2d");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
然后,我们需要创建一个函数来绘制遮罩层和光圈。该函数会在滑块值改变和鼠标/触摸事件发生时被调用。
function drawFlashlight() { // 清除画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 绘制黑色遮罩层 ctx.fillStyle = "rgba(0, 0, 0, 0.7)"; ctx.fillRect(0, 0, canvas.width, canvas.height); // 获取光圈位置和大小 const lightSize = document.getElementById("lightSize").value; const mouseX = event.clientX; const mouseY = event.clientY; // 绘制光圈 ctx.globalCompositeOperation = "destination-out"; ctx.beginPath(); ctx.arc(mouseX, mouseY, lightSize, 0, Math.PI * 2); ctx.fill(); ctx.globalCompositeOperation = "source-over"; }
最后,我们需要为滑块和鼠标/触摸事件添加事件监听器,并在事件发生时调用绘制函数。
document.getElementById("lightSize").addEventListener("input", drawFlashlight);
canvas.addEventListener("mousemove", drawFlashlight); canvas.addEventListener("touchmove", drawFlashlight);
现在,当滑块值改变或鼠标/触摸事件发生时,光圈会在Canvas上绘制出来,实现动态手电筒效果。
<!DOCTYPE html> <html> <head> <title>Dynamic Flashlight</title> <style> body { margin: 0; overflow: hidden; } </style> </head> <body> <canvas id="flashlightCanvas"></canvas> <input type="range" id="lightSize" min="50" max="200" value="100"> <script> const canvas = document.getElementById("flashlightCanvas"); const ctx = canvas.getContext("2d"); canvas.width = window.innerWidth; canvas.height = window.innerHeight; function drawFlashlight() { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = "rgba(0, 0, 0, 0.7)"; ctx.fillRect(0, 0, canvas.width, canvas.height); const lightSize = document.getElementById("lightSize").value; const mouseX = event.clientX; const mouseY = event.clientY; ctx.globalCompositeOperation = "destination-out"; ctx.beginPath(); ctx.arc(mouseX, mouseY, lightSize, 0, Math.PI * 2); ctx.fill(); ctx.globalCompositeOperation = "source-over"; } document.getElementById("lightSize").addEventListener("input", drawFlashlight); canvas.addEventListener("mousemove", drawFlashlight); canvas.addEventListener("touchmove", drawFlashlight); </script> </body> </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。