JavaScript实现字符雨效果

JavaScript实现字符雨效果

在网页上实现字符雨效果,可以通过在HTML的body元素中添加一个全屏的canvas元素,然后使用JavaScript编写一个动画效果,不断更新canvas中的字符颜色和位置,从而实现字符雨效果。

准备工作

  1. 在HTML中添加一个全屏的canvas元素
<canvas id="matrix-canvas"></canvas>

<style>
    html,
    body,
    canvas {
        margin: 0;
        padding: 0;
        width: 100%;
        height: 100%;
    }
</style>
  1. 创建一个绘制字符的函数
function drawText(context, text, x, y, color) {
    context.fillStyle = color;
    context.font = "15px monospace";
    context.fillText(text, x, y);
}

实现步骤

  1. 创建画布和画笔
const canvas = document.getElementById('matrix-canvas');
const context = canvas.getContext('2d');
  1. 定义字符和颜色数组
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const colors = [
    '#f00', '#0f0', '#00f', '#ff0', '#f0f', '#0ff'
];
  1. 定义字符产生的速度和密度
const textSpeed = 8;  //每帧移动的像素数
const textDensity = 15;  //字符行密度
  1. 创建一个字符的类
class Text {
    constructor(x, y, speed, density) {
        this.x = x;
        this.y = y;
        this.speed = speed;
        this.density = density;
        this.char = chars[Math.floor(Math.random() * chars.length)];
        this.color = colors[Math.floor(Math.random() * colors.length)];
    }

    draw(context) {
        drawText(context, this.char, this.x, this.y, this.color);
    }

    update() {
        this.y += this.speed;
        if (this.y >= canvas.height) {
            this.y = -textDensity;
            this.char = chars[Math.floor(Math.random() * chars.length)];
            this.color = colors[Math.floor(Math.random() * colors.length)];
        }
    }
}
  1. 创建字符数组并生成字符对象
let texts = [];

for (let i = 0; i < canvas.width / textDensity; i++) {
    const x = i * textDensity;
    const y = Math.random() * canvas.height;
    texts.push(new Text(x, y, textSpeed, textDensity));
}
  1. 创建动画函数,更新字符位置并重绘画布
function animate() {
    context.clearRect(0, 0, canvas.width, canvas.height);
    for (let i = 0; i < texts.length; i++) {
        texts[i].update();
        texts[i].draw(context);
    }
    requestAnimationFrame(animate);
}

animate();

示例说明

示例一:修改字符密度和字符颜色

textDensity改为20,textSpeed改为10,colors数组增加一些颜色,如下:

const textSpeed = 10;  //每帧移动的像素数
const textDensity = 20;  //字符行密度
const colors = [
    '#f00', '#0f0', '#00f', '#ff0', '#f0f', '#0ff',
    '#000', '#888', '#ddd'
];

效果:字符变少了,速度加快了,颜色多样了。

示例二:字符大小和字体修改

修改drawText函数中的font属性,将字体大小修改为25像素。修改Text类的构造函数,添加一个size属性,将字符大小也作为参数传入,并修改draw函数中的font属性。

function drawText(context, text, x, y, color) {
    context.fillStyle = color;
    context.font = "25px monospace";
    context.fillText(text, x, y);
}

class Text {
    constructor(x, y, speed, density, size) {
        this.x = x;
        this.y = y;
        this.speed = speed;
        this.density = density;
        this.size = size;
        this.char = chars[Math.floor(Math.random() * chars.length)];
        this.color = colors[Math.floor(Math.random() * colors.length)];
    }

    draw(context) {
        context.fillStyle = this.color;
        context.font = this.size + "px monospace";
        context.fillText(this.char, this.x, this.y);
    }

    update() {
        this.y += this.speed;
        if (this.y >= canvas.height) {
            this.y = -textDensity;
            this.char = chars[Math.floor(Math.random() * chars.length)];
            this.color = colors[Math.floor(Math.random() * colors.length)];
        }
    }
}

const textSpeed = 8;  //每帧移动的像素数
const textDensity = 15;  //字符行密度
const textSize = 25; //字符大小
const colors = [
    '#f00', '#0f0', '#00f', '#ff0', '#f0f', '#0ff'
];

效果:字符变大了,字体也跟着变了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现字符雨效果 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • js操作时间(年-月-日 时-分-秒 星期几)

    下面是JS操作时间的完整攻略。 获取当前时间 要获取当前时间,可以使用Date对象。该对象提供的方法可以获取当前时间的年、月、日、时、分、秒等信息。 const now = new Date(); console.log(now); // 输出当前时间的完整信息 const year = now.getFullYear(); // 获取当前年份 const …

    JavaScript 2023年5月27日
    00
  • 分享我通过 API 赚钱的思路

    写在最前 我们经常看到非常多的 API 推荐,但又经常收藏到收藏夹里吃灰,仿佛收藏了就是用了。 很多时候没有用起来,可能是因为想不到某类 API 可以用来做什么或者能应用在哪里。 下面我将我思考的一些方向给到大家,希望我们都能共同致富。 天气类 API 天气预报查询:获取城市的天气实况数据;更新频率分钟级别。 空气质量查询:获取指定城市的整点观测空气质量等。…

    JavaScript 2023年4月18日
    00
  • JavaScript字符串对象substr方法入门实例(用于截取字符串)

    JavaScript字符串对象substr方法入门实例(用于截取字符串) 什么是substr方法? 在JavaScript中,字符串是一种数据类型,字符串对象是一种包含该数据类型的对象类型。JavaScript为字符串对象提供了许多用于处理字符串的方法,其中之一就是substr方法。substr方法可以用于截取字符串中的一段字符,并返回该子字符串。 subs…

    JavaScript 2023年5月28日
    00
  • 分享8个JavaScript库可更好地处理本地存储

    下面是详细讲解: 分享8个JavaScript库可更好地处理本地存储 为什么要使用JavaScript库来处理本地存储? 在Web开发中,本地存储是一个很重要的概念。我们经常需要在用户的浏览器端存储数据,这些数据可以是用户的个人设置、应用的状态、页面的缓存等等。在HTML5标准中,浏览器原生提供了两种本地存储方式:localStorage和sessionSt…

    JavaScript 2023年6月11日
    00
  • 分享几个JavaScript运算符的使用技巧

    让我来详细讲解一下“分享几个JavaScript运算符的使用技巧”的攻略。 标题 分享几个JavaScript运算符的使用技巧 代码块 在 JavaScript 中,有很多运算符可以帮助我们进行数据处理和逻辑运算。下面我就来分享几个常用的运算符,并介绍一些使用技巧。 一、 空值合并运算符 空值合并运算符 ?? 用于确定变量或表达式是否为未定义或空值(null…

    JavaScript 2023年5月27日
    00
  • 解析javascript中鼠标滚轮事件

    下面是解析 JavaScript 中的鼠标滚轮事件的完整攻略: 什么是鼠标滚轮事件? 鼠标滚轮事件(mousewheel 事件)指的是当用户通过鼠标滚轮滚动时触发的事件。在 JavaScript 中,我们可以使用 mousewheel 事件来监听用户的鼠标滚轮操作。 如何监听鼠标滚轮事件? 在 JavaScript 中,可以通过以下两种方式来监听鼠标滚轮事件…

    JavaScript 2023年6月11日
    00
  • JS中的回调函数实例浅析

    JS中的回调函数实例浅析 什么是回调函数 回调函数是一种在函数执行完毕后,将另一个函数作为参数传递给它,并在后者执行的函数。它的特点是:回调函数是作为参数传递给另一个函数的,当另一个函数执行完毕后,回调函数才会被执行。 回调函数通常用于异步编程中,由于JavaScript是单线程的,异步调用的函数执行完毕后需要得到回调函数的执行结果,以便继续执行后续的代码。…

    JavaScript 2023年5月28日
    00
  • javascript实现图片左右滚动效果【可自动滚动,有左右按钮】

    下面是详细讲解“javascript实现图片左右滚动效果【可自动滚动,有左右按钮】”的完整攻略: 1. 确定HTML结构 首先需要确定HTML结构,一般来说,我们可以使用 ul 和 li 标签来实现一个图片轮播图。如下所示: <div class="container"> <ul class="img-list…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部