canvas实现代码雨

73 阅读1分钟
<template>
  <div class="containe">
    <el-button type="primary" style="float: left;" @click="startCanvasAnimation">开始动画</el-button>
    <el-button type="primary" style="float: left;" @click="stopCanvasAnimation">停止动画</el-button>
    <canvas id="canvas"></canvas>
  </div>
</template>

<script>
export default {
  data() {
    return {
      intervalId:''
    }
  },
  methods: {
    stopCanvasAnimation() {
      this.intervalId && clearInterval(this.intervalId)
    },
    startCanvasAnimation() {
      let canvas = document.getElementById('canvas');
      let ctx = canvas.getContext('2d');
      canvas.width = screen.availWidth
      canvas.height = screen.availHeight
      let str = '12345678900987654321'.split('')
      let Arr = Array(Math.ceil(canvas.width / 10)).fill(0)
      this.intervalId = setInterval(() => {
        this.getCanvas(canvas,ctx,str,Arr);
      }, 40); 
    },
    getCanvas(canvas,ctx,str,Arr) {
      ctx.fillStyle = 'rgba(0,0,0,0.05)'
      ctx.fillRect(0, 0, canvas.width, canvas.height)
      ctx.fillStyle = '#30964e'
      Arr.forEach((item, index) => {
        ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 10, item + 10)
        Arr[index] = item > canvas.height || item > 10000 * Math.random() ? 0 : item + 10
      })
    },
  }
}
</script>