html--彩虹马

news2024/9/29 1:30:34

文章目录

  • html
    • js
    • css
  • 效果

html

<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Rainbow Space Unicorn</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<img src="img/unicorn.png" alt="unicorn" id="unicorn" hidden>
<script  src="js/index.js"></script>
</body>
</html>

js

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
window.addEventListener('DOMContentLoaded', init);
//#region classes
var Vector = /** @class */ (function () {
    function Vector() {
        this.x = 0;
        this.y = 0;
        this.vx = 0;
        this.vy = 0;
        this.angle = 0;
        this.va = 0.05;
    }
    return Vector;
}());
var Particle = /** @class */ (function (_super) {
    __extends(Particle, _super);
    function Particle() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        _this.id = Math.random().toString();
        _this.color = randomColor();
        _this.radius = 8;
        _this.opacity = 1;
        return _this;
    }
    return Particle;
}(Vector));
var Unicorn = /** @class */ (function (_super) {
    __extends(Unicorn, _super);
    function Unicorn(image) {
        var _this = _super.call(this) || this;
        _this.image = image;
        return _this;
    }
    return Unicorn;
}(Vector));
var Tile = /** @class */ (function (_super) {
    __extends(Tile, _super);
    function Tile() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        _this.color = randomColor();
        _this.width = 30;
        _this.height = 10;
        _this.opacity = 1;
        return _this;
    }
    return Tile;
}(Vector));
var ParticleFactory = /** @class */ (function () {
    function ParticleFactory() {
    }
    ParticleFactory.archive = function (p) {
        ParticleFactory.particleArchive[p.id] = Object.assign({}, p);
    };
    ParticleFactory.retrieve = function (p) {
        if (p.id in ParticleFactory.particleArchive) {
            return ParticleFactory.particleArchive[p.id];
        }
        return null;
    };
    ParticleFactory.create = function (options) {
        var p = new Particle();
        Object.assign(p, options);
        ParticleFactory.archive(p);
        return p;
    };
    ParticleFactory.reset = function (p) {
        var archivedVersion = ParticleFactory.retrieve(p);
        if (archivedVersion) {
            ;
            Object.assign(p, archivedVersion);
        }
    };
    ParticleFactory.particleArchive = {};
    return ParticleFactory;
}());
var Renderer = /** @class */ (function () {
    function Renderer($) {
        var _this = this;
        this.$ = $;
        this.renderParticle = function (p) {
            var $ = _this.$;
            var x = p.x, y = p.y, radius = p.radius, color = p.color, opacity = p.opacity;
            $.save();
            $.globalAlpha = opacity;
            $.fillStyle = color;
            $.translate(x, y);
            $.beginPath();
            $.arc(0, 0, radius, 0, PI2);
            $.fill();
            $.stroke();
            $.restore();
        };
        this.renderStar = function (p) {
            var $ = _this.$;
            var radius = p.radius, color = p.color, x = p.x, y = p.y, opacity = p.opacity;
            $.save();
            $.translate(x, y);
            $.fillStyle = color;
            $.globalAlpha = opacity;
            $.beginPath();
            for (var i = 5; i--;) {
                $.lineTo(0, radius);
                $.translate(0, radius);
                $.rotate(PI2 / 10);
                $.lineTo(0, -radius);
                $.translate(0, -radius);
                $.rotate(-((Math.PI * 6) / 10));
            }
            $.lineTo(0, radius);
            $.fill();
            $.stroke();
            $.restore();
        };
        this.renderTile = function (t) {
            var $ = _this.$;
            var x = t.x, y = t.y, width = t.width, height = t.height, color = t.color, opacity = t.opacity;
            $.save();
            $.globalAlpha = opacity;
            $.fillStyle = color;
            $.translate(x, y);
            $.beginPath();
            $.rect(0, 0, width, height);
            $.fill();
            $.stroke();
            $.restore();
        };
    }
    Renderer.prototype.clearScreen = function () {
        var $ = this.$;
        $.clearRect(0, 0, $.canvas.width, $.canvas.height);
    };
    Renderer.prototype.renderImage = function (img, x, y) {
        var $ = this.$;
        $.save();
        $.drawImage(img, x, y);
        $.restore();
    };
    Renderer.prototype.renderUnicorn = function (u) {
        this.renderImage(u.image, u.x, u.y);
    };
    return Renderer;
}());
//#endregion
//#region globals
var CANVAS = document.createElement('canvas');
var CTX = CANVAS.getContext('2d');
var WIDTH = (CANVAS.width = window.innerWidth);
var HEIGHT = (CANVAS.height = window.innerHeight);
var PI2 = 2 * Math.PI;
var GRAVITY = 0.125;
var COLOR_FADE = 0.01;
var COLORS = [
    '#9400D3',
    '#4B0082',
    '#0000FF',
    '#00FF00',
    '#FFFF00',
    '#FF7F00',
    '#FF0000'
];
var RENDERER = new Renderer(CTX);
var TILES = [];
var PARTICLES = [];
var PARTICLE_COUNT = 40;
var UNICORN_IMAGE = document.getElementById('unicorn');
var UNICORN = new Unicorn(UNICORN_IMAGE);
//#endregion
//#region utils
function randomColor() {
    return sample(COLORS);
}
function randomNumber(min, max) {
    return Math.random() * (max - min) + min;
}
function randomBoolean() {
    return Math.random() > 0.5;
}
function sample(a) {
    return a[Math.floor(Math.random() * a.length)];
}
function outsideScreen(p) {
    var diameter = p.radius * 2;
    var yExceeded = p.y - diameter > HEIGHT || p.y + diameter < 0;
    var xExceeded = p.x - diameter > WIDTH || p.x + diameter < 0;
    return yExceeded || xExceeded;
}
//#endregion
//#region animation
function updateParticle(p) {
    p.vy += GRAVITY;
    p.y += p.vy;
    p.x += p.vx;
    if (p.opacity > COLOR_FADE) {
        p.opacity -= COLOR_FADE;
    }
    if (outsideScreen(p)) {
        ParticleFactory.reset(p);
    }
}
function updateUnicorn(unicorn) {
    var image = unicorn.image;
    var centerX = WIDTH / 2 - image.width / 2;
    var centerY = HEIGHT / 2 - image.height / 2 - 50;
    var radiusX = 20;
    var radiusY = 8;
    unicorn.x = centerX + Math.cos(unicorn.angle) * radiusX;
    unicorn.y = centerY + Math.sin(unicorn.angle) * radiusY;
    unicorn.angle += unicorn.va;
}
function animation() {
    requestAnimationFrame(animation);
    RENDERER.clearScreen();
    TILES.forEach(updateTile);
    TILES.forEach(RENDERER.renderTile);
    PARTICLES.forEach(updateParticle);
    PARTICLES.forEach(RENDERER.renderStar);
    if (UNICORN_IMAGE.complete) {
        updateUnicorn(UNICORN);
        RENDERER.renderUnicorn(UNICORN);
    }
}
function createParticles() {
    for (var i = PARTICLE_COUNT; i > 0; --i) {
        var p = ParticleFactory.create({
            x: WIDTH / 2,
            y: HEIGHT / 2,
            vx: randomNumber(-14, -3),
            vy: randomNumber(-8, 2)
        });
        var i_1 = Math.floor(randomNumber(0, 60)) + 1;
        while (i_1--) {
            updateParticle(p);
        }
        PARTICLES.push(p);
    }
}
function updateTile(t) {
    t.vx -= GRAVITY;
    t.x += t.vx;
    t.y += t.vy;
    if (t.x + t.width < 0) {
        t.x = randomNumber(0, WIDTH) + WIDTH;
        t.vx = 0;
    }
}
function createTiles() {
    var tileCount = HEIGHT / 10;
    for (var i = tileCount; i > 0; --i) {
        var tileWidth = randomNumber(60, 120);
        var t = new Tile();
        t.opacity = randomNumber(0.1, 0.6);
        t.width = tileWidth;
        t.x = tileWidth * (i - 1);
        t.y = t.height * (i - 1);
        var ii = Math.floor(randomNumber(0, 260)) + 1;
        while (ii--) {
            updateTile(t);
        }
        TILES.push(t);
    }
}
function setup() {
    document.body.appendChild(CANVAS);
    var unicornX = WIDTH / 2 - UNICORN.image.width / 2;
    var unicornY = HEIGHT / 2 - UNICORN.image.height / 2;
    UNICORN.x = unicornX;
    UNICORN.y = unicornY;
    createTiles();
    createParticles();
}
function init() {
    setup();
    animation();
}
//#endregion

css

body {
    background: linear-gradient(180deg, #FF7F0022, white, #9400D322);
    box-sizing: border-box;
    margin: 0;
    overflow: hidden;
    text-align: center;
}

.made-by {
    position: absolute;
    bottom: 16px;
    right: 16px;
    padding: 8px 16px;
    background: white;
    color: hotpink;
    font-family: monospace;
    font-size: 12px;
}

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1516682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…

Kubernetes弃用Dockershim,转向Containerd:影响及如何应对

Kubernetes1.24版本发布时&#xff0c;正式宣布弃用Dockershim&#xff0c;转向Containerd作为默认的容器运行环境。Kubernetes以CRI(Container Runtime Interface)容器运行时接口制定接入准则&#xff0c;用户可以使用Containerd、CRI-O、CRI- Dockerd及其他容器运行时作为Kub…

在分布式环境中使用状态机支持数据的一致性

简介 在本文中&#xff0c;我们将介绍如何在分布式系统中使用transaction以及分布式系统中transaction的局限性。然后我们通过一个具体的例子&#xff0c;介绍了一种通过设计状态机来避免使用transaction的方法。 什么是数据库transaction Transaction是关系型数据普遍支持的…

如何利用WebRTC构建点对点的即时通讯工具

在当今竞争激烈的商业环境中&#xff0c;企业越来越需要构建自己的即时通讯工具来提升内部沟通效率和信息安全&#xff0c;减少第三方工具依赖带来的潜在风险&#xff0c;并能与自身的行业业务深入融合。 拥有专用的通讯平台能够加快信息的流动&#xff0c;提升工作协同和任务执…

【C语言】【时间复杂度】Leetcode 153. 寻找旋转排序数组中的最小值

文章目录 题目时间复杂度概念时间复杂度的计算 解题思路代码呈现 题目 链接: link 时间复杂度 概念 时间复杂度是一种函数&#xff0c;定量地描述了该算法运行的时间。既然是一种函数&#xff0c;就涉及到自变量与因变量。因变量代表是时间复杂的规模&#xff0c;自变量是…

HTTP代理的特性、功能作用是什么样的?

在当今互联网时代&#xff0c;HTTP代理作为网络通信中的一项重要技术&#xff0c;在各行各业都有着广泛的应用。然而&#xff0c;对于许多人来说&#xff0c;HTTP代理的特性和功能作用并不十分清晰。在本文中&#xff0c;我们将深入探讨HTTP代理的各种特性和功能&#xff0c;帮…

Linux系统Docker部署Plik系统结合内网穿透实现公网访问本地文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

jenkins+maven+gitlab自动化构建打包、部署

Jenkins自动化部署实现原理 环境准备 1、jenkins已经安装好 docker安装jenkins 2、gitlab已经安装好 docker安装gitlab 一、Jenkins系统配置 1.Global Tool Configuration 任务构建所用到的编译环境等配置&#xff0c;配置参考&#xff1a; jdk配置&#xff08;jenkins自带…

C# ListView 控件使用

1.基本设置 listView1.Columns.Add("序号", 60); //向 listView1控件中添加1列 同时设置列名称和宽度listView1.Columns.Add("温度", 100); //下同listView1.Columns.Add("偏移", 100);listView1.Columns.Add("分割", 50);listView1…

广州虚拟动力 | AI智能交互型虚拟数字人解决方案

广州虚拟动力整合自研的AI数字人技术与AI大语言模型技术&#xff0c;推出AI智能交互型虚拟数字人解决方案&#xff0c;面向旅游景区、博物馆、银行、医院、营业厅、酒店住宿、大型商场等&#xff0c;以AI数字人为载体&#xff0c;承担公共服务职能&#xff0c;根据各行业特性和…

学习Java的第十天

本章来讲一下什么是字符串 一、什么是字符串 在Java中&#xff0c;最常见的基本类型就是字符串了&#xff0c;哪哪都能见到&#xff0c;如输入语句&#xff0c;输出语句等&#xff01;那么&#xff0c;什么是字符串呢&#xff0c;字符串就是String类&#xff0c;String类是Ja…

1361:产生数(Produce)

【解题思路】 1、将数字拆分保存在数组中&#xff0c;而后转换每一位。 2、将数字变化规则保存在x、y两个一维数组中&#xff0c;x[i]到y[i]是一种转换规则。 3、从n的初始值开始搜索&#xff0c;对n做数字拆分&#xff0c;将拆分后的各位数字保存在一个数组中。针对数组中的每…

使用timm库的一些知识点

timm&#xff08;Torch Image Models&#xff09;是一个在PyTorch上构建的图像模型库&#xff0c;它提供了一系列预训练的深度学习模型&#xff0c;使得研究人员和开发者可以方便地进行图像分类、目标检测等任务。 使用timm库创建模型时&#xff0c;如何确定模型的名字 使用…

3-14八股文学习

八股学习是看别人面试被问到的问题&#xff0c;然后把它发给GPT&#xff0c;让gpt讲一讲&#xff0c;自己再理解一下&#xff0c;真的很想拿offer&#xff0c;想去暑期实习啊啊啊啊啊 你用过什么 SpringBoot 里的什么注解&#xff1f;Spring Boot 中有很多常用的注解&#xff…

Ele admin pro和iView Admin pro的用户管理页面对比

Ele admin pro和iView Admin pro都是非常优秀的B端框架&#xff0c;功能大同小异&#xff0c;本文就着重比对一下二者的用户案例页面&#xff0c;让老铁们感知一些细节。 一、用户列表 用户列表 用户列表 二、用户编辑 三、用户添加 四、角色管理 五、权限分配 六、角色添加

Web前端开发学习路线图

Web前端开发学习路线图可以为你提供一个明确的学习路径&#xff0c;帮助你逐步掌握Web前端开发的各项技能。以下是一个基本的学习路线图&#xff0c;你可以根据自己的实际情况进行调整和补充。 一、基础阶段 HTML&#xff1a;学习HTML的基本语法&#xff0c;了解HTML文档的结构…

【Linux网络】应用层协议——http协议

目录 HTTP协议 认识URL urlencode和urldecode HTTP协议格式 HTTP请求协议格式 获取浏览器的HTTP请求 HTTP响应协议格式 构建HTTP响应给浏览器 构建处理HTTP请求类及代码完善 HTTP的方法 GET方法和POST方法 HTTP的状态码 HTTP常见Header Cookie&Session HTT…

c++ 常用函数 集锦 整理中

c 常用函数集锦 目录 1、string和wstring之间转换 1、string和wstring之间转换 std::string convertWStringToString(std::wstring wstr) {std::string str;if (!wstr.empty()){std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;str converter.to_b…

java 数据结构 优先级队列(PriorityQueue)

目录 优先级队列 堆的概念 堆的性质 堆的存储方式 堆的创建 堆的插入 堆的删除 用堆模拟实现优先级队列 PriorityQueue的特性 PriorityQueue常用接口介绍 堆排序 优先级队列 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下…

【BUG 弹药库】Tortoise git 绿色的勾 ✔ 和 红色的 !突然不见了该如何解决呢?

文章目录 1. 出现的问题描述如下所示&#xff1a;2. 如何解决这个问题呢 &#xff1f; 1. 出现的问题描述如下所示&#xff1a; 用 TortoiseGit 提交代码的时候&#xff0c;红色的 ! 和 绿色的 ✔ 突然消失了&#xff1b; 2. 如何解决这个问题呢 &#xff1f; ① 首先按住快…