vue+ts代码雨[自定义雨点]

Vue3+ts代码雨[自定义雨点]

在这里插入图片描述

随缘学vue3,用watchEffect把代码雨代码翻了一下,包了个组件,可以自定义雨点并显示了,直接上码了

<script setup lang="ts">
let stuff: Ref = ref("0123456789ABCDEF"); //定义雨点内容
import { ref, onMounted, Ref, watchEffect } from 'vue'; //watchEffect监听变化
const scene: Ref<any> = ref();
let content: string[] = Array.from(stuff.value);

onMounted(() => {
    const myCanvas: HTMLCanvasElement = scene.value;
    let ctx = myCanvas.getContext('2d');
    let arr = Array(Math.ceil(myCanvas.width)).fill(0);
    myCanvas.width = 1080;
    myCanvas.height = 480;

    const rain = () => {
        if (ctx) {
            ctx.fillStyle = 'rgba(0,0,0,0.05)';//设置渐变消失
            ctx.fillRect(0, 0, myCanvas.width, myCanvas.height);
            ctx.fillStyle = "#fff";//设置文字颜色
            arr.forEach((item, index) => {
                console.log(item, index);
                if (ctx) ctx.fillText(content[Math.floor(Math.random() * content.length)], index * 10, item + 10); 
                arr[index] = item > myCanvas.height || item > 6000 * Math.random() ? 0 : item + 10;
            })
        }
    }
    setInterval(rain, 40);

    watchEffect(() => {
        content = Array.from(stuff.value);//监视数据的变化,变化就执行
        rain();
    });
});


</script>
<template>
    <div class="container">
        <p class="show-text">{{ stuff }}</p>
        <input v-model="stuff" class="input-field">
        <canvas ref="scene" class="canvas"></canvas>
    </div>
</template>

<style scoped>
canvas {
    display: block;
}

.container {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    font-family: Arial, sans-serif;
}

.input-field {
    border: none;
    background-color: #2d2d2d;
    color: #fff;
    padding: 10px;
    font-size: 16px;
    width: 200px;
    height: 40px;
    border-radius: 4px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

.canvas {
    background-color: #2d2d2d;
    border-radius: 4px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

.show-text {
    border: none;
    background-color: #fff;
    color: #2d2d2d;
    padding: 0.5rem;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值