canvas的简单应用

101 阅读1分钟

说明

将项目中遇到过使用canvas的场景通过简单的demo进行总结

将绘制过程转化成视频

场景:通过canvas实现的设计工具,有前后对比功能,当点击前后对比功能按钮,能将绘制前和绘制后的对比图生成视频

    const canvas = document.querySelector("canvas");
    const ctx = canvas.getContext("2d");
    const { width, height } = canvas;

    ctx.fillStyle = "#705697";

    function draw(rotation = 0) {
      ctx.clearRect(0, 0, 1000, 1000);
      ctx.save();
      ctx.translate(width / 2, height / 2);
      ctx.rotate(rotation);
      ctx.translate(-width / 2, -height / 2);
      ctx.beginPath();
      ctx.rect(200, 200, 200, 200);
      ctx.fill();
      ctx.restore();
    }

    function update(t) {
      draw(t / 500);
      requestAnimationFrame(update);
    }
    update(0);

    const stream = canvas.captureStream();
    const recorder = new MediaRecorder(stream, { mimeType: "video/webm" });

    const data = [];
    recorder.ondataavailable = function (event) {
      if (event.data && event.data.size) {
        data.push(event.data);
      }
    };

    recorder.onstop = () => {
      const url = URL.createObjectURL(new Blob(data, { type: "video/webm" }));
      document.querySelector("#videoContainer").style.display = "block";
      document.querySelector("video").src = url;
    };

    recorder.start();
    setTimeout(() => {
      recorder.stop();
    }, 6000);