Red de conocimiento informático - Conocimiento informático - Mini programa: usa lienzo para crear efectos de texto

Mini programa: usa lienzo para crear efectos de texto

Primero tomemos la última imagen, este es el efecto final:

Mira el efecto brillante nuevamente:

1. Primero dibuja el texto en el lienzo;

2. Utilice getImageData() para obtener datos de la imagen

3. Calcule el color negro en los datos de la imagen (se pueden usar otros colores) de acuerdo con el valor de un determinado intervalo (obtenga las coordenadas);

4. Dibuje un rectángulo en las coordenadas obtenidas (también puede dibujar otras formas).

5. Utilice requestAnimationFrame para cambiar el color del rectángulo.

Esto parpadeará~~

var i = 0

Página({

/***Datos iniciales de la página* /data:{hideNav: false,colors: ["#fff", "#FF6E40", "#FFAB40", "#FFFF00", "# EEFF41", "#B2FF59", "#69F0AE", "#64FFDA" , "#18FFFF", "#40C4FF", "#E040FB", "#FF4081", "#ff5252"],

texto: 'Shaw Battle',desplazamiento: false,setting.false},

/*** Función de ciclo de vida: escuchar la carga de la página*/ onLoad: función (opciones) {let that = this, text = wx.setData({text})this.init()} ,

init() {wx.createSelectorQuery().select('#canvas').fields({node: true,size: true,}).exec((res) => {let eso = esto,texto = this.data.textconst ancho = res[0].widthconst alto = res[0].

const lienzo = res[0].nodeconst ctx = lienzo.getContext('2d ')const dpr = 1 //wx.getSystemInfoSync().pixelRatiocanvas.width = ancho * dprcanvas.height = alto * dprctx.height = alto * dprctx.scale(dpr, dpr)i = ( canvas.width - that.getByteLen (texto) * 100) / 2ctx.fillStyle = "#ffffffff";ctx.fillRect(0, 0, canvas.lineWidth = 5;// ctx.strokeText(texto, 0, 100); let imageData = ctx.getImageData( 0, 0, lienzo.ancho, lienzo.alto).data;// console.log(imageData)

ctx.fillStyle = "#fffffillRect(0, 0, lienzo.ancho, lienzo.alto) ;

this.data.canvas = canvasthis.data.ctx = ctxthis.data.imageData = imageDataconsole.log(canvas.width, canvas.height)// this.drawText()const renderLoop = () => {this.drawText()

canvas.requestAnimationFrame(renderLoop) }//?canvas.cancelAnimationFrame(renderLoop)canvas.requestAnimationFrame(renderLoop)})},drawText() {var gap = 7, {soy

ageData,canvas,ctx, text,scroll} = this.dataif (desplazamiento) {if (i >= canvas.width) {i = -canvas.width}i += 2}

ctx.clearRect (0, 0, lienzo.ancho, lienzo.alto) for (var h = 0; h < lienzo.ctx.clearRect(0, 0, lienzo.ancho, lienzo.alto) {i += 2} posición],g = imageData[posición + 1],b = imageData[posición + 2];

if (r + g + b == 0) {ctx.fillStyle = this.data[posición + 1];