Tutorial detallado sobre el uso de lienzo con vue

Usando Canvas en Vue.js

Vue.js es un marco de JavaScript popular para crear interfaces de usuario. Proporciona una forma concisa de administrar y representar datos y al mismo tiempo admite la integración con otras bibliotecas y herramientas. Para usar Canvas en Vue.js, puede seguir estos pasos:

  1. Presentación de Canvas en el proyecto Vue.js: puede <canvas>crear Canvas agregando un elemento en un archivo HTML. Luego, en el componente Vue.js, nombre el elemento usando refel atributo <canvas>para que pueda hacer referencia a él en la instancia de Vue.
<template>
  <canvas ref="myCanvas"></canvas>
</template>
  1. Operar Canvas en una instancia de Vue: en mountedla función de enlace del componente Vue, puede obtener <canvas>la referencia del elemento y realizar operaciones de dibujo en el mismo.
<script>
export default {
    
    
  mounted() {
    
    
    const canvas = this.$refs.myCanvas;
    const ctx = canvas.getContext('2d');

    // 在 Canvas 上进行绘图操作
    ctx.fillStyle = 'red';
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  }
}
</script>

En el ejemplo anterior, this.$refs.myCanvasobtuvimos <canvas>la referencia al elemento y getContext('2d')obtuvimos el contexto de dibujo 2D usando el método. Luego, usamos fillStylela propiedad para establecer el color de relleno en rojo y usamos fillRect()el método para dibujar un rectángulo que llene todo el lienzo.

Uso de métodos comunes.

  1. getContext('2d'): Obtenga el contexto del dibujo 2D. Devuelve un objeto de contexto utilizado para operaciones de dibujo en el Canvas.
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
  1. beginPath(): Iniciar un nuevo camino. Se utiliza para definir un camino, que puede contener líneas rectas, curvas, arcos, etc.
ctx.beginPath();
  1. closePath(): Camino cerrado. Conecta los puntos inicial y final del camino actual para formar una forma cerrada.
ctx.closePath();
  1. lineTo(x, y): Añade una línea recta al punto de coordenadas especificado. Se utiliza para agregar un segmento recto a un camino.
ctx.lineTo(100, 100);
  1. rect(x, y, width, height): Crea un camino rectangular. Se utiliza para agregar un rectángulo al camino.
ctx.rect(50, 50, 100, 100);
  1. arc(x, y, radius, startAngle, endAngle, anticlockwise): crea una ruta de arco. Se utiliza para agregar un arco a un camino.
ctx.arc(100, 100, 50, 0, Math.PI * 2, false);
  1. moveTo(x, y): Mueve el punto inicial de la ruta al punto de coordenadas especificado. Se utiliza para mover la posición actual en la ruta sin dibujar líneas.
ctx.moveTo(50, 50);
  1. stroke(): Dibuja el borde del camino. Se utiliza para dibujar el borde del camino según la definición del camino.
ctx.stroke();

Aquí hay un código de muestra para dibujar un gráfico simple:

<canvas id="myCanvas"></canvas>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

// 绘制一个矩形
ctx.beginPath();
ctx.rect(50, 50, 100, 100);
ctx.closePath();
ctx.stroke();

// 绘制一个圆形
ctx.beginPath();
ctx.arc(200, 100, 50, 0, Math.PI * 2, false);
ctx.closePath();
ctx.stroke();

Primero obtuvimos <canvas>la referencia del elemento y getContext('2d')obtuvimos el contexto del dibujo 2D a través del método. Luego, beginPath()comenzamos un nuevo camino usando el método, rect()dibujamos un camino rectangular usando el método, closePath()cerramos el camino usando el método y stroke()dibujamos el borde del rectángulo usando el método. A continuación, beginPath()comenzamos un nuevo camino nuevamente usando el método, arc()dibujamos un camino circular usando el método, closePath()cerramos el camino usando el método y stroke()dibujamos el borde del círculo usando el método.

Un simple efecto de reloj

Puede optimizar lentamente el estilo según sus propias preferencias, tanto la lógica como el código de dibujo están disponibles

Insertar descripción de la imagen aquí
El siguiente es un código de muestra simple que muestra cómo usar Canvas para dibujar un efecto de reloj:

<canvas id="clockCanvas" width="400" height="400"></canvas>
// 获取 Canvas 元素和 2D 上下文
const canvas = document.getElementById('clockCanvas');
const ctx = canvas.getContext('2d');

// 获取 Canvas 的中心点坐标
const centerX = canvas.width / 2;
const centerY = canvas.height / 2;

// 绘制时钟的外圆
function drawClockFace() {
    
    
  ctx.beginPath();
  ctx.arc(centerX, centerY, 190, 0, Math.PI * 2);
  ctx.lineWidth = 5;
  ctx.strokeStyle = '#000';
  ctx.stroke();
  ctx.closePath();
}

// 绘制时钟的刻度
function drawClockTicks() {
    
    
  for (let i = 0; i < 12; i++) {
    
    
    const angle = Math.PI / 6 * i;
    const x1 = centerX + Math.sin(angle) * 160;
    const y1 = centerY - Math.cos(angle) * 160;
    const x2 = centerX + Math.sin(angle) * 180;
    const y2 = centerY - Math.cos(angle) * 180;

    ctx.beginPath();
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
    ctx.lineWidth = 3;
    ctx.strokeStyle = '#000';
    ctx.stroke();
    ctx.closePath();
  }
}

// 绘制时钟的指针
function drawClockHands() {
    
    
  const now = new Date();
  const hours = now.getHours();
  const minutes = now.getMinutes();
  const seconds = now.getSeconds();

  // 绘制时针
  const hourAngle = Math.PI / 6 * (hours % 12) + Math.PI / 360 * minutes;
  const hourHandLength = 100;
  const hourX = centerX + Math.sin(hourAngle) * hourHandLength;
  const hourY = centerY - Math.cos(hourAngle) * hourHandLength;

  ctx.beginPath();
  ctx.moveTo(centerX, centerY);
  ctx.lineTo(hourX, hourY);
  ctx.lineWidth = 8;
  ctx.strokeStyle = '#000';
  ctx.stroke();
  ctx.closePath();

  // 绘制分针
  const minuteAngle = Math.PI / 30 * minutes + Math.PI / 1800 * seconds;
  const minuteHandLength = 140;
  const minuteX = centerX + Math.sin(minuteAngle) * minuteHandLength;
  const minuteY = centerY - Math.cos(minuteAngle) * minuteHandLength;

  ctx.beginPath();
  ctx.moveTo(centerX, centerY);
  ctx.lineTo(minuteX, minuteY);
  ctx.lineWidth = 5;
  ctx.strokeStyle = '#000';
  ctx.stroke();
  ctx.closePath();

  // 绘制秒针
  const secondAngle = Math.PI / 30 * seconds;
  const secondHandLength = 160;
  const secondX = centerX + Math.sin(secondAngle) * secondHandLength;
  const secondY = centerY - Math.cos(secondAngle) * secondHandLength;

  ctx.beginPath();
  ctx.moveTo(centerX, centerY);
  ctx.lineTo(secondX, secondY);
  ctx.lineWidth = 2;
  ctx.strokeStyle = '#f00';
  ctx.stroke();
  ctx.closePath();
}

// 绘制整个时钟
function drawClock() {
    
    
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  drawClockFace();
  drawClockTicks();
  drawClockHands();

  requestAnimationFrame(drawClock);
}

// 开始绘制时钟
drawClock();

En este código de muestra, primero obtenemos <canvas>la referencia del elemento y getContext('2d')obtenemos el contexto del dibujo 2D a través del método. Luego definimos algunas funciones para dibujar las distintas partes del reloj. drawClockFace()La función se usa para dibujar el círculo exterior del reloj, drawClockTicks()la función se usa para dibujar la escala del reloj y drawClockHands()la función se usa para dibujar las manecillas del reloj. En drawClockHands()la función, utilizamos new Date()el método para obtener la hora actual y calcular la posición del puntero en función de los valores de horas, minutos y segundos. Finalmente, usamos requestAnimationFrame()el método para llamar drawClock()a la función en un bucle para lograr el efecto dinámico del reloj.

Supongo que te gusta

Origin blog.csdn.net/ACCPluzhiqi/article/details/132831063
Recomendado
Clasificación