html掉落本地图片效果

news2024/9/22 11:39:24

实现一个加载本地图片并掉落的html页面。


说明

DuanWu.htmlzongzi_1.png, zongzi_2.png, zongzi_3.png, yadan.png4张图片放在同一个目录下,然后双击打开DuanWu.html即可。

  • 使用ChromeMicrosoft Edge浏览器打开

  • 若使用IE浏览器打开,下方会出现Internet Explorer已限制此网页运行脚本或ActiveX控件。,请点击右边允许阻止的内容(A)


代码

DuanWu.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>本地图片飘落效果</title>
    <style>
        body {
            background-color: #1a6840;
            overflow: hidden;
        }

        canvas {
            display: block;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>

<body>
    <canvas id="canvas"></canvas>
    <script>
        var canvas = document.getElementById('canvas');
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        var ctx = canvas.getContext('2d');
        var leaves = [];
        var numLeaves = 28;
        images = loadImages()
        function loadImages() {
            images = []
            images[0] = new Image()
            images[0].src = "zongzi_1.png"
            images[1] = new Image()
            images[1].src = "zongzi_2.png"
            images[2] = new Image()
            images[2].src = "zongzi_3.png"
            images[3] = new Image()
            images[3].src = "yadan.png"
            return images
        }
        function createLeaf(image) {
            this.x = Math.random() * canvas.width;
            this.y = -100;
            this.vx = Math.random() * 2 - 1;
            this.vy = Math.random() * 3 + 1;
            this.draw = function () {
                ctx.drawImage(image, this.x, this.y, image.width, image.height);
            }
            this.update = function () {
                this.x += this.vx;
                this.y += this.vy;
                if (this.y > canvas.height + 10) {
                    this.y = -10;
                    this.x = Math.random() * canvas.width;
                }
            }
        }
        function init() {
            for (var i = 0; i < numLeaves; i++) {
                leaves.push(new createLeaf(images[i % images.length]));
            }
        }
        function loop() {
            requestAnimationFrame(loop);
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            for (var i = 0; i < numLeaves; i++) {
                leaves[i].draw();
                leaves[i].update();
            }
        }

        init();
        loop();
    </script>
</body>

</html>

参考

HTML5实现的树叶飘落动画特效

HTML5 Canvas显示本地图片实例1、Canvas预览图片实例1

中国色


图片

zongzi_1.png
zongzi_2.png
zongzi_3.png
yadan.png

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

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

相关文章

Java框架之springboot starter

写在前面 本文一起看下springboot starter相关的内容。 1&#xff1a;官方提供的starter 在spring-boot-autocongure包中定义了官方提供的一百多个starter&#xff0c;如下&#xff1a; 2&#xff1a;框架是如何定义starter的&#xff1f; 因为springboot的普及度逐步提高&…

Unity Sponza(斯蓬扎宫)场景-BuildIn-URP-HDRP

Sponza&#xff08;斯蓬扎宫&#xff09;场景 &#x1f354;URP &#x1f354;URP 资源下载

Linux: hang: 线程太多,导致的一个例子

今天遇到了一个Linux系统hang住的情况&#xff0c;从vmcore里看bt&#xff0c;没有看到明显的crash、lockup等信息&#xff1b; 而且从vmcore里也不能看具体的当时CPU事情情况。 不过还是怀疑&#xff0c;是因为线程太多&#xff0c;导致资源占用比较严重&#xff0c;从而导致一…

GeForce RTX 40系列显卡哪个更好?这个避坑测评攻略快收下

自2022年底以来&#xff0c;Nvidia一直在推出基于Ada Lovelace架构的GeForce RTX 40系列消费级GPU&#xff0c;旨在取代之前基于Ampere架构的GeForce RTX 30系列和基于Turing架构的GeForce RTX 20系列。 Nvidia称其RTX 40系列GPU的性能比前代产品有了显着提升&#xff0c;许多…

写给新手程序员的一封信

为什么写这篇文章 我是一名毕业四年的后端开发&#xff08;可能会很多人来说&#xff0c;工作时间也没多长嘛&#xff09;&#xff0c;但是在这四年里&#xff0c;我写过PHP、Go、vue、做了两年多的敏捷团队管理&#xff0c;也设计过一些系统的架构。也算是有着相对较丰富的项…

数据结构-手撕单链表+代码详解

⭐️ 往期相关文章 ✨ 链接1&#xff1a;数据结构-手撕顺序表(动态版)代码详解 ✨ 链接2&#xff1a;数据结构和算法的概念以及时间复杂度空间复杂度详解 ⭐️ 链表 &#x1f320; 什么是链表&#xff1f; 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据…

OPLS-DA分析,组间差异 图形详解

OPLS-DA分析&#xff0c;组间差异 在上一场小工具讲解中&#xff0c;小姐姐给大家介绍了PLS-DA的原理及用途&#xff0c;而在代谢组学数据分析中&#xff0c;除去PLS-DA以外&#xff0c;OPLS-DA分析也是非常常见的&#xff0c;仅一个字母之差&#xff0c;那二者到底有何差别&am…

HTML select 用法及常用事件

前言 用于记录开发中常用到的&#xff0c;快捷开发 简单实例 <select><option value"volvo">Volvo</option><option value"saab">Saab</option><option value"mercedes">Mercedes</option><opt…

【WSN定位】基于浣熊优化算法的多通信半径和跳距加权Dvhop定位算法【Matlab代码#46】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. Dvhop定位算法2. 原始浣熊优化算法2.1 开发阶段2.2 探索阶段 3. 多通信半径和跳距加权策略3.1 多通信半径策略3.2 跳距加权策略 4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他…

超细,设计一个“完美“的测试用例,用户登录模块实例...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 好的测试用例一定…

ad18学习笔记七:drc检查在线和批量的区别

Altium Designer 22 DRC规则检查解析 - 哔哩哔哩 硬件工程师基本功&#xff1a;DRC设置要点详解-凡亿课堂 AD中PCB检查设计错误规则设置&#xff08;DRC检查配置&#xff09;_ad怎么检查pcb有没有错误_没有价值的生命的博客-CSDN博客 Altium Designer之DRC检查学习笔记_ad d…

【Linux】基于环形队列的生产者消费者模型的实现

文章目录 前言一、基于环形队列的生产者消费者模型的实现 前言 上一篇文章我们讲了信号量的几个接口和基于环形队列的生产者消费者模型&#xff0c;下面我们就快速来实现。 一、基于环形队列的生产者消费者模型的实现 首先我们创建三个文件&#xff0c;分别是makefile&#x…

【C++】医学影像归档和通信系统-PACS

一、PACS是通过DICOM3.0国际标准接口&#xff0c;将CT、超声、放射检查(DR)、核磁、磁共振&#xff08;MR)等多种医学影像以数字化的形式保存&#xff0c;提供授权方式查看和调回&#xff0c;并提供一些辅助诊断管理功能的系统。 二、PACS系统是HIS系统的重要组成部分&#xff…

强化学习路径优化:基于Q-learning算法的机器人路径优化(MATLAB)

一、强化学习之Q-learning算法 Q-learning算法是强化学习算法中的一种&#xff0c;该算法主要包含&#xff1a;Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息&#xff0c;来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的…

打造自己的分布式MinIO对象存储

MinIO是一个对象存储解决方案&#xff0c;它提供了一个与Amazon Web Services S3兼容的API&#xff0c;并支持所有核心S3特性。MinIO旨在部署在任何地方——公共云或私有云、裸机基础架构、协调环境和边缘基础架构。 分布式MinIO如何工作 Server Pool由多个Minio服务节点与其附…

OPNET Modeler 怎么修改背景颜色

OPNET Modeler 软件中除了顶层的网络模型&#xff0c;节点模型和进程模型中的默认背景色都是灰色的。 节点模型背景颜色如下图所示。 进程模型背景颜色如下图所示。 使用时间长了发现这个灰色背景对眼睛保护还真不错&#xff0c;而且在这种灰色背景下&#xff0c;你添加包流线…

高压线路零序电流方向保护程序逻辑原理(四)

2&#xff0e;全相循环程序逻辑框图 全相循环程序逻辑简图如图3&#xff0d;18所示。程序入口首先检测标志位UQDB1&#xff0c;在采样中断服务程序中采用3U。突变量来区分接地故障和TA断线&#xff0c;接地故障时Δ3U。大于定值&#xff0c;置标志位UQDB1&#xff0c;这是11型…

web标签的使用

一、iframe标签的使用 iframe参数说明 实例&#xff1a; <body><iframe width"400" height"400" name"abc"></iframe><br /><ul><a href"01.table.html" target"abc">01.table.html&l…

使用docker安装mysql主从集群

1.安装MySQL主容器 1.1首先&#xff0c;使用以下命令创建MySQL主容器&#xff1a; sudo docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:latest 在这里&#xff0c;使用了Docker官方提供的MySQL镜像&#xff0c;并且使用了MySQL的默认3…

浅谈自动化测试框架开发,有你们不会知道的吗?

在自动化测试项目中&#xff0c;为了实现更多功能&#xff0c;我们需要引入不同的库、框架。 首先&#xff0c;你需要将常用的这些库、框架都装上。 pip install requests pip install selenium pip install appium pip install pytest pip install pytest-rerunfailures pip …