分享JS四种好玩的黑客背景效果代码

下面我将详细讲解“分享JS四种好玩的黑客背景效果代码”的完整攻略。

1. 简介

黑客背景效果是一种常见的网页背景效果,其通过在页面背景上显示类似黑客攻击的效果,给人一种神秘而高科技的感觉。本文将分享四种好玩的JS黑客背景效果代码,具体包括:

  1. 随机字符滚动效果
  2. 矩阵雨效果
  3. 烟花爆炸效果
  4. 扫描线效果

以下将对每种效果进行具体讲解。

2. 随机字符滚动效果

随机字符滚动效果是一种很有趣的黑客背景效果,它会在页面上随机滚动显示字符。下面是代码:

<body id="body"></body>

<script>
const characters = "!<>-_\\/[]{}—=+*^?#________";
const numberOfCharacters = 200;
const duration = 50;

for (let i = 0; i < numberOfCharacters; i++) {
    const span = document.createElement("span");
    span.innerText = characters.charAt(Math.floor(Math.random() * characters.length));
    span.style.animationDelay = `${i * duration}ms`;
    document.getElementById("body").appendChild(span);
}
</script>

这段代码使用了CSS的动画特性,使用了 animation-delay 来对每个字符的滚动速度进行控制。

3. 矩阵雨效果

矩阵雨效果是一种非常经典的黑客背景效果,它会在页面上滚动显示矩阵代码的效果。下面是代码:

<body>

<canvas id="c"></canvas>

<script type="module">
import * as THREE from "https://esm.sh/three@0.125.2/build/three.module.js";

const c = document.getElementById("c");
const ctx = c.getContext("2d");

const numberOfColumns = 100;
const fontSize = 12;
const fontName = "Consolas";
const columnSpeed = 30;
const columnDelay = 150;
const letterSpacing = 10;

const characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const charactersLength = characters.length;

const text = [];
for (let i = 0; i < 60; i++) {
    text[i] = {
        char: characters.charAt(Math.floor(Math.random() * charactersLength)),
        y: -i * fontSize
    };
}

class Column {
    constructor(x) {
        this.x = x;
        this.maxHeight = c.height;
        this.speed = columnSpeed;
        this.delay = x * columnDelay;
        this.transitionCounter = 0;
        this.letters = [];
        this.numberOfLetters = Math.floor(Math.random() * 20);
        for (let i = 0; i < this.numberOfLetters; i++) {
            this.letters.push(characters.charAt(Math.floor(Math.random() * charactersLength)));
        }
    }

    update(dt) {
        this.transitionCounter += dt;
        if (this.transitionCounter > this.delay && this.letters.length <= text.length) {
            this.letters.unshift(text[this.letters.length]);
            this.transitionCounter = 0;
        }

        if (this.letters.length > text.length + 1) {
            this.letters.pop();
        }

        this.maxHeight = text.length * fontSize + columnSpeed;
    }

    draw() {
        ctx.font = `${fontSize}px ${fontName}`;
        ctx.fillStyle = "#33FF00";
        ctx.textAlign = "center";
        ctx.textBaseline = "bottom";

        for (let i = 0; i < this.letters.length; i++) {
            const letter = this.letters[i];
            const y = letter.y + columnSpeed;
            const x = this.x;
            const alpha = (text.length - letter.y) / text.length;
            const color = `rgba(51, 255, 0, ${alpha})`;
            ctx.fillStyle = color;
            ctx.fillText(letter.char, x, y);
        }
    }
}

const columns = [];
for (let i = 0; i < numberOfColumns; i++) {
    columns.push(new Column(i * letterSpacing));
}

let lastTime = Date.now();

function frame() {
    const currentTime = Date.now();
    const dt = (currentTime - lastTime) / 1000;
    ctx.clearRect(0, 0, c.width, c.height);
    for (let i = 0; i < columns.length; i++) {
        const column = columns[i];
        column.update(dt);
        column.draw();
    }

    lastTime = currentTime;
    requestAnimationFrame(frame);
}

requestAnimationFrame(frame);
</script>
</body>

矩阵雨效果使用了 canvas 元素和 three.js 库来处理动画效果。该代码使用了字母淡入淡出和运动效果,让矩阵代码的效果展示得更加出色。

4. 烟花爆炸效果

烟花爆炸效果是一种非常神奇的黑客背景效果,它会在页面上显示烟花爆炸的效果。下面是代码:

<body>

<div id="container"></div>

<script>
const container = document.querySelector("#container");

class Firework {
    constructor() {
        this.x = Math.random() * container.clientWidth;
        this.y = container.clientHeight;
        this.radius = 3;
        this.launchTime = Date.now();
        this.speed = {
            x: Math.random() * 6 - 3,
            y: -Math.random() * 15 - 10
        };
        this.time = 0;
        this.maxTime = Math.random() * 200 + 300;
        this.color = {
            r: 200 + Math.round(Math.random() * 55),
            g: 200 + Math.round(Math.random() * 55),
            b: 200 + Math.round(Math.random() * 55),
        }
    }

    update() {
        const dt = (Date.now() - this.launchTime) / 1000;
        this.x += this.speed.x;
        this.y += this.speed.y + dt * 50;
        this.time += dt;
        if (this.time >= this.maxTime) {
            createFireworks(this.x, this.y);
        }
    }

    draw() {
        const style = `rgba(${this.color.r}, ${this.color.g}, ${this.color.b}, ${1 - this.time / this.maxTime})`;
        container.insertAdjacentHTML("beforeend", `<div class="particle" style="background-color:${style};top:${this.y}px;left:${this.x}px;"></div>`);
    }

    get isDone() {
        return this.y > container.clientHeight || this.time >= this.maxTime;
    }
}

const fireworks = [];

function updateFireworks() {
    for (let i = fireworks.length - 1; i >= 0; i--) {
        const firework = fireworks[i];
        firework.update();
        if (firework.isDone) {
            fireworks.splice(i, 1);
        }
    }
}

function drawFireworks() {
    for (let i = fireworks.length - 1; i >= 0; i--) {
        const firework = fireworks[i];
        firework.draw();
    }
}

function createFireworks(x, y) {
    for (let i = 0; i < 50; i++) {
        const firework = new Firework();
        fireworks.push(firework);
    }
}

function frame() {
    updateFireworks();
    drawFireworks();
    requestAnimationFrame(frame);
}

requestAnimationFrame(frame);
</script>

<style>
#container {
    position: relative;
    width: 100%;
    height: 100vh;
    background-color: #000;
    overflow: hidden;
}

.particle {
    position: absolute;
    width: 6px;
    height: 6px;
    border-radius: 50%;
}
</style>
</body>

烟花爆炸效果使用了 div 元素和 setTimeout 来处理动画效果。该代码使用了类似于粒子爆炸的效果,让页面显示得更加抢眼。

5. 扫描线效果

扫描线效果是一种非常独特的黑客背景效果,它会在页面上扫描显示线条的效果。下面是代码:

<body>

<div id="container">
    <div class="line"></div>
    <div class="line"></div>
</div>

<script>
const container = document.querySelector("#container");
const lines = document.querySelectorAll(".line");

let animationFrameId;
let lineIndex = 0;
let lineHeight = "100%";

function update() {
    lines[lineIndex].style.height = lineHeight;
    if (lineHeight === "100%") {
        lineIndex -= 1;
        lineHeight = "0%";
    } else if (lineHeight === "0%") {
        lineIndex += 1;
        lineHeight = "100%";
    }
    if (lineIndex < 0) {
        lineIndex = lines.length - 1;
    }
    if (lineIndex >= lines.length) {
        lineIndex = 0;
    }
    animationFrameId = requestAnimationFrame(update);
}

update();
</script>

<style>
#container {
    position: relative;
    width: 100%;
    height: 100vh;
    background-color: #000;
}

.line {
    position: absolute;
    width: 100%;
    height: 0%;
    top: 0;
    left: 0;
    background-color: #0F0;
    opacity: 0.1;
    transition: .3s ease-out;
    transform-origin: 50% 0%;
}

.line:nth-child(even) {
    background-color: #0F0;
}

.line:nth-child(odd) {
    background-color: #00FF00;
}

.line:nth-child(1) {
    animation: none !important;
    height: 100% !important;
    width: 1px;
    left: 50%;
    top: 0;
    transform: translate(-50%, 0);
}
</style>
</body>

扫描线效果使用了 div 元素的 transitiontransform 属性来处理动画效果。该代码使用了类似于电视机扫描效果的线条扫描效果,让页面显示得更加科幻。

以上就是关于“分享JS四种好玩的黑客背景效果代码”的详细攻略。希望对你有帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分享JS四种好玩的黑客背景效果代码 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • XSS绕过技术 XSS插入绕过一些方式总结

    XSS(Cross-Site Scripting,跨站脚本攻击)是指恶意攻击者在目标网站注入恶意脚本,使得用户在访问该网站时被攻击者控制。XSS攻击是目前最常见的Web安全问题之一,攻击者通过XSS攻击可以窃取用户的敏感信息,如账号密码、Cookie等,或者利用XSS攻击进行其它恶意行为。为了防止XSS攻击,web开发中应该采用严格的输入过滤和输出转义等措施…

    css 2023年6月9日
    00
  • 让几个横向排列的浮动子div居中显示的方法

    要让几个横向排列的浮动子div居中显示,我们可以采用以下的方法: 步骤一:设置包含块的宽度和text-align属性 我们可以为包含块设置一个固定的宽度,并将其水平居中显示。为此,可以在包含块的CSS中设置如下属性: .container { width: 960px; margin: 0 auto; } 这样,就可以将包含块的宽度设置为960像素,并将其水…

    css 2023年6月10日
    00
  • Vue如何在CSS中使用data定义的数据浅析

    在 Vue 中,我们可以使用 data 属性来定义组件的数据。这些数据可以在组件的模板中使用,也可以在组件的 JavaScript 代码中使用。但是,你可能不知道的是,你也可以在 CSS 中使用这些数据。下面是一个完整攻略,包含了如何在 CSS 中使用 Vue 中定义的数据的过程和两个示例说明。 在 CSS 中使用 Vue 中定义的数据 步骤一:将数据绑定到…

    css 2023年5月18日
    00
  • css firefox火狐浏览器下的兼容性问题

    CSS在Firefox中的兼容性问题主要包括以下几个方面: 盒模型的计算方法问题 Firefox与IE的盒模型计算方法有所不同。在标准模式下,Firefox采用的是W3C标准的盒模型,即元素的宽度是指content的宽度加上padding和border的宽度,而IE则采用的是IE盒模型,在IE盒模型中,元素的宽度是指content、padding和borde…

    css 2023年6月9日
    00
  • css之粘性sticky布局实现题头定位在顶部的方法

    接下来我将详细讲解如何使用CSS中的粘性(sticky)布局实现题头(header)在页面滚动时始终保持在顶部的方法。 什么是Sticky布局? Sticky布局是CSS3中的一种新型布局方式,其可以使得元素在特定条件下“粘”在其容器中的指定位置,当满足某种条件(比如到达某个位置、滚动到某个位置)之后就不再滚动,从而实现某种效果。 如何实现题头固定在页面顶部…

    css 2023年6月9日
    00
  • JS+CSS实现Div弹出窗口同时背景变暗的方法

    实现Div弹出窗口同时背景变暗的方法,通常涉及到以下几个步骤: 1.创建一个基本结构的HTML文件,其中包含一个触发窗口的按钮和一个用于显示弹窗的DIV元素。 <!DOCTYPE html> <html> <head> <title>弹出窗口示例</title> <!– 在<head&…

    css 2023年6月9日
    00
  • css line-height属性的使用技巧

    当我们在设计网页时,使用CSS来控制文本显示是非常重要的。其中,line-height属性可以帮助我们控制文本的行间距,进而影响到整个网页的排版效果。在这里,我将详细讲解“CSS line-height属性的使用技巧”这个话题。 line-height的基本用法 line-height属性用于指定行高。它可以使用像素值、百分比值、em值等多个单位进行设置。在…

    css 2023年6月10日
    00
  • 原生js实现自定义滚动条组件

    下面我来详细讲解如何原生js实现自定义滚动条组件。 1. 确定组件需求 在实现自定义滚动条组件前,我们需要先确定组件的需求。一般来说,自定义滚动条组件需要具备以下功能: 拖动滑块来实现滚动; 点击轨道实现精准跳转; 自适应内容高度,并根据显示内容的变化而动态更新滚动条长度; 能够跨浏览器平台使用。 2. 组件结构设计 组件的结构设计需要包含以下元素: 一条轨…

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