使用29行JS代码实现一个拖拽彩虹

457 阅读1分钟

这是我们的小涂鸦画布的代码(下面有详细代码说明):

<body bgcolor='black'>
<canvas id="myCanvas" width="800" height="600" style="touch-action:none; "></canvas>
<script>
let canvas = document.getElementById("myCanvas");
let context = canvas.getContext("2d");
let counter = 0;
context.strokeStyle = `hsl(${counter % 360},100%,50%)`;
context.shadowColor = `hsl(${counter % 360},100%,50%)`;
context.shadowBlur = 5;
context.lineWidth = '2';
let draw = false;
 
window.onpointerdown = function(event) {
  draw = true;
  context.beginPath();
  context.moveTo(event.offsetX, event.offsetY);
  if (!event.isPrimary || event.button == 2) {
    context.clearRect(0, 0, canvas.width, canvas.height);
  }
};
 
window.onpointermove = function(event) {
  if (draw) {
    context.lineTo(event.offsetX, event.offsetY);
    context.stroke();
  }
};
 
window.onpointerup = function(event) {
  draw = false;
  counter += 18;
  context.strokeStyle = `hsl(${counter % 360},100%,50%)`;
  context.shadowColor = `hsl(${counter % 360},100%,50%)`;
};
 
</script>
</body>
</html>
  • 第[1-6]行设置了HTML5 Canvas
  • [7],初始化颜色计数器
  • [8-9]将当前颜色分配给该行,而阴影
  • [10]则赋予模糊效果的强度。模糊是主体形状周围的随机像素,从而产生“辉光”效果。
  • [11]线的宽度
  • [12]我们要等到指针向下时才能绘制

整个动作都在以下三个指针功能中:

1.鼠标点击

  • [15]开始绘制
  • [16]开始绘制路径
  • [17]移动将笔指向指针(鼠标/触摸)位置
  • [18-19],如果一根手指以上触摸屏幕或单击鼠标右键,请清除画布

2.鼠标移动

  • [24-26]如果开始绘制, 请在当前指针位置绘制一条线。请注意,整个路径与模糊一起被重新绘制。模糊是使整条线越厚,移动得越多的原因。

3.鼠标离开

  • [31]停止绘制
  • [32]增加颜色计数器
  • [33-34]根据计数器设置笔触和阴影颜色 大多数人都熟悉RGB颜色模型(红色/绿色/蓝色),但是这里我们正在使用HSL(色相/饱和度/亮度)模型。 运作方式如下:

image.png 色相的范围是0到360,因此,如果我们每次增加18,则在20笔触之后我们会恢复到原始颜色。 为简单起见,我们始终将“饱和度”设置为100%,将“亮度”设置为50%。

这是上面产生彩虹的代码:

<body>
<canvas id="myCanvas2" width="720" height="100"></canvas>
<script>
let canvas2 = document.getElementById("myCanvas2");
let context2 = canvas2.getContext("2d");
for (let x = 0; x < 360; x++) {
  context2.fillStyle = `hsl(${x},100%,50%)`;
  context2.fillRect(x * 2, 0, 2, 100);
  }
</script>
</body>
</html>

您可能需要添加一些想法:

  • -“撤消”功能
  • -图像保存
  • -颜色选择
  • -形状(圆形/矩形)

自己加一下吧