zoukankan      html  css  js  c++  java
  • canvas在vue中的应用

    使用cavas可以绘制各种图表、生成二维码、制作H5小游戏。

    生命周期
    canvas应该在mounted的生命周期中初始化,在updated中是无效的。

    export default {
      mounted() {
        this.initCanvas()
      },
      methods: {
        initCanvas() {
          console.log("初始化canvas")
          let canvas = document.getElementById('canvas');
          let ctx = canvas.getContext('2d');
        }
      }
    }
    

    响应式画布
    当需要使canvas铺满全屏时,直接使用css声明的效果不是我们需要的效果。

    // 错误的效果,将造成图像变形拉伸
    .canvas {
       100vw;
      height: 100vh;
    }
    

    正确的做法,我们应该给canvas的宽高赋值:

    let canvas = document.getElementById('canvas');
    let ctx = canvas.getContext('2d');
    let winW = window.innerWidth
    let winH = window.innerHeight
    canvas.width = winW
    canvas.height = winH
    

    响应式画布:

    let canvas;
    let ctx;
    export default {
      mounted() {
        this.initCanvas()
        // 当调整窗口大小时重绘canvas
        window.onresize = () => {
          this.initCanvas()
        }
      },
      methods: {
        initCanvas() {
          console.log("初始化canvas")
          canvas = document.getElementById('canvas');
          ctx = canvas.getContext('2d');
          canvas.width = window.innerWidth
          canvas.height = window.innerHeight
          this.drawSmile()
        },
        drawSmile() {
          ctx.beginPath();
          ctx.arc(75, 75, 50, 0, Math.PI * 2, true); // 绘制
          ctx.moveTo(110, 75);
          ctx.arc(75, 75, 35, 0, Math.PI, false); // 口(顺时针)
          ctx.moveTo(65, 65);
          ctx.arc(60, 65, 5, 0, Math.PI * 2, true); // 左眼
          ctx.moveTo(95, 65);
          ctx.arc(90, 65, 5, 0, Math.PI * 2, true); // 右眼
          ctx.stroke();
        }
      }
    }
    
  • 相关阅读:
    经典机器学习算法总结
    从0开始学Python---01
    Android-Canvas.save() Canvas.restore() 总结
    Android-属性动画原理总结
    设计模式-外观模式
    设计模式-模板方法
    设计模式-装饰者模式
    设计模式-策略模式
    设计模式-工厂方法模式
    设计模式-简单工厂模式
  • 原文地址:https://www.cnblogs.com/unclefang/p/11180337.html
Copyright © 2011-2022 走看看