canvas画布demo

canvas画布demo

<!DOCTYPE html>
<html>
  <head>
    <title>demo</title>
    <style>
      body {
        margin: 0;
        padding: 0;
        overflow: hidden;
        height: 100vh;
      }

      canvas {
        display: block;
      }
    </style>
  </head>

  <body>
    <canvas id="canvas"></canvas>

    <script>
      const canvas = document.getElementById("canvas");
      const ctx = canvas.getContext("2d");
      let sakuraArray = [];

      // 创建樱花对象
      class Sakura {
        constructor() {
          this.x = Math.random() * canvas.width;
          this.y = Math.random() * -canvas.height;
          this.size = Math.random() * 10 + 10;
          this.speed = 1.5; // 设置较小的速度
          this.angle = Math.random() * 45 + 45; // 设置固定的角度
          this.drift = Math.random() * -2.5 - 1.25; // 设置往左漂移
          this.alpha = 1;

          // 创建一个樱花图片对象
          this.img = new Image();
          this.img.src = "./yinghua.png";//本地图片路径
        }

        // 更新樱花位置和透明度
        update() {
          this.y += this.speed;
          this.x += this.drift;
          this.alpha -= 0.005; // 调整透明度变化的速度
        }

        // 绘制樱花
        draw() {
          ctx.save();
          ctx.translate(this.x, this.y);
          ctx.rotate((this.angle * Math.PI) / 180);
          ctx.globalAlpha = this.alpha;
          ctx.drawImage(this.img, -this.size / 2, -this.size / 2, this.size, this.size);
          ctx.restore();
        }
      }

      // 创建樱花
      function createSakura() {
        sakuraArray.push(new Sakura());
      }

      // 创建多个樱花
      function createSakuraMulti(count) {
        for (let i = 0; i < count; i++) {
          createSakura();
        }
      }

      // 绘制多个樱花
      function drawSakuraMulti() {
        for (let i = 0; i < sakuraArray.length; i++) {
          sakuraArray[i].update();
          sakuraArray[i].draw();
          if (sakuraArray[i].alpha <= 0) {
            sakuraArray.splice(i, 1);
            createSakura();
          }
        }
      }

      // 初始化函数
      function init() {
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        createSakuraMulti(50); // 少一些樱花
      }

      // 监听浏览器窗口大小变化事件
      window.addEventListener("resize", function () {
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
      });

      // 主循环函数
      function animate() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        drawSakuraMulti();
        requestAnimationFrame(animate);
      }

      // 启动
  // 启动
  init();
  animate();
</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要在Canvas上创建一个可拖动的区域。我们可以使用HTML5的Drag事件来实现这个功能。 在HTML中添加一个canvas元素,并为其添加一个id属性: ```html <canvas id="live2d-canvas"></canvas> ``` 接下来,在JavaScript中,我们可以使用以下代码来初始化canvas并添加拖动事件: ```javascript // 获取canvas元素 var canvas = document.getElementById('live2d-canvas'); // 初始化Live2D模型 var live2d = new LAppLive2DModel(); // 添加拖动事件 canvas.addEventListener('mousedown', startDragging); canvas.addEventListener('mousemove', dragModel); canvas.addEventListener('mouseup', stopDragging); // 定义拖动状态 var isDragging = false; var dragStartX, dragStartY; // 开始拖动 function startDragging(event) { isDragging = true; dragStartX = event.clientX; dragStartY = event.clientY; } // 拖动模型 function dragModel(event) { if (isDragging) { var deltaX = event.clientX - dragStartX; var deltaY = event.clientY - dragStartY; live2d.addX(deltaX * 0.5); live2d.addY(deltaY * 0.5); dragStartX = event.clientX; dragStartY = event.clientY; } } // 停止拖动 function stopDragging(event) { isDragging = false; } ``` 以上代码中,我们定义了一个`startDragging`函数,用于在鼠标按下时设置拖动状态,并记录鼠标的起始位置。接着,我们使用`mousemove`事件来调用`dragModel`函数,在拖动期间更新模型的X和Y坐标。最后,我们定义了一个`stopDragging`函数,用于在鼠标释放时停止拖动。 注意:以上代码仅为示例代码,实际应用时需要根据Live2D模型的大小和Canvas的大小进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值