是用原生js创建红包雨效果

需求:

创建红包雨

答案:

// 红包雨代码 开始
// 添加遮罩层
const addOverlay = () => {const overlay = document.createElement('div');overlay.className = 'overlay';overlay.style.position = 'fixed';overlay.style.top = '0';overlay.style.left = '0';overlay.style.width = '100%';overlay.style.height = '100%';overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';overlay.style.zIndex = '20';document.body.appendChild(overlay);
}// 移除遮罩层
const removeOverlay = () => {const overlay = document.querySelector('.overlay');if (overlay) {overlay.remove();}
}// 开启红包雨
const openRain = () => {console.log('点击了openRain');const hongbaos = Array.from({ length: 20 }); // 创建具有指定长度的数组// const maxLeft = document.body.offsetWidth - 40;// 获取根元素的字体大小(以像素为单位)const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);// 获取 app 元素的像素宽度const appWidthPx = document.getElementById('app').offsetWidth;// 将像素宽度转换为 rem 值const appWidthRem = appWidthPx / rootFontSize;console.log(appWidthRem,'输出 app 元素的宽度(以 rem 为单位)'); // 输出 app 元素的宽度(以 rem 为单位)const maxLeft = appWidthRem > 0 ? appWidthRem - 3 : document.body.offsetWidth - 40;// 将 rem 转换为像素const maxLeftPx = maxLeft * rootFontSize;console.log(maxLeftPx,'maxLeftPx')console.log(maxLeft,'maxLeft')// 添加遮罩层addOverlay();// 创建容器元素const container = document.createElement('div');container.className = 'container';for (let i = 0; i < hongbaos.length; i++) {const img = document.createElement('img');img.src = './hongbao.png';img.className = 'img';img.style.left = `${Math.random() * maxLeftPx}px`;img.style.animationDuration = `${Math.random() * 2 + 2}s`;img.style.animationDelay = `${i * 0.5}s`; // 设置不同的延迟时间container.appendChild(img);}// 在项目body节点上挂载container红包雨document.body.appendChild(container);// 设置定时器,在四秒后移除红包雨和遮罩层setTimeout(() => {removeOverlay();container.remove();}, 4000);

添加了遮罩层,挂载到body,

因为我是用的元素单位是rem自适应,

谁需要获取网页中的字体大小px - rootFontSize,

这时候需要让红包雨只在app的宽度内下,不能超过app背景图片,也不能显示半张红包下落的情况,需要所有红包都在背景图片内下落

因为我需要适配电脑端网页和手机端网页,

而且我是rem单位,

所以需要先获取app的元素宽度,

使用offsetWidth方法获取的默认是px单位 - appWidthPx,

所以现在获取的appWidthRem时app现在的px宽度,现在需要知道app现在是多少rem,

通过计算获得appWidthRem,这就是现在app是多少rem,

然后我们设置红包图片是3rem的宽度,

所以我们就可以获取到下落红包雨的范围,

这时我们需要计算img.style.left,

计算出红包雨最左边边界值,

而且值使用px为单位,

所以我们还需要将上面的rem返回为px,

当代码执行到现在,不管是切换成电脑端,还是移动端,

右边的红包雨是正常的,不会出现超出或者一般在外面的情况了,

但是左边的红包现在移动端正常,

电脑端还是靠左边,

后面找到了原因,

因为包含说有红包雨的元素: container是没有css设置的,

现在是不占用空间的,

所以电脑端的时候默认是全屏红包雨,

这时候我们需要设置container元素和app元素重合,

这时候电脑端也就可以实现以图片背景为标准进行距离控制了,

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

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

相关文章

Unity_使用Image和脚本生成虚线段

生成如图样式的虚线段 原理&#xff1a;使用Image做一条线段&#xff0c;这个方法的原理就是给固定的片元长度&#xff0c;对Image进行分割&#xff0c;把片元添加到一个列表中&#xff0c;然后循环对列表中的偶数位进行隐藏&#xff0c;也可以调整线段的宽度 缺陷&#xff1…

无公网IP实现远程访问MongoDB文件数据库【内网穿透】

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2…

支持向量机(SVM)详解

支持向量机&#xff08;support vector machines&#xff0c;SVM&#xff09;是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器&#xff0c;间隔最大使它有别于感知机。 1、线性可分支持向量机与硬间隔最大化 1.1、线性可分支持向量机 考虑一个二分…

Disruptor挖坑MemoryAnalyzer来填

Disruptor挖坑MemoryAnalyzer来填 1、起因背景2、初步定位3、细化定位3.1、内存文件导出命令3.2、MemoryAnalyzer分析xxx.hprof文件 4、思考5、花絮 1、起因背景 博主练手写的并发项目订单服务出现了程序一直处于加载未完成的状态&#xff0c;电脑温度升高&#xff0c;CPU使用…

springboot125汽车资讯网站

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的125汽车资讯网站 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获…

springboot家乡特色推荐系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括家乡特色推荐的网络应用&#xff0c;在外国家乡特色推荐系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。家乡特色推荐系统采用java技术&#xff0…

UDS Flash刷写用例简单介绍

文章目录 1.Boot的功能1.1 目的1.2 功能 2.测试用例设计2.1 设计框架2.2 正向测试2.1.1 刷写流程2.1.2 重复刷写2.1.3压力刷写 2.3 逆向测试2.2.1 断电后刷写2.2.2 中断通讯后刷写2.2.3 篡改刷写数据2.2.4 修改软件校验数据2.2.5 修改刷写流程2.2.6 高负载刷写2.2.7 高低压刷写…

JuiceSSH结合内网穿透实现移动端设备公网远程访问Linux虚拟机

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Linux下安装 Redis7

Linux下安装 Redis7 三、Linux下安装 Redis7【redis-7.2.4.tar.gz】3.1.下载redis的安装包3.1.1.手动下载Redis压缩包并上传【redis-7.2.4.tar.gz】3.1.2.wget工具下载redis-7.2.4.tar.gz 3.2.将安装包进行解压缩3.3.进入redis的安装包3.4.检查是否有gcc 环境3.5.编译和安装并指…

VS Code C++ 开发:入门和 IntelliSense 配置

你是否在满天星空下琢磨如何在 VS Code 中配置用于 C 开发的智能感知功能(IntelliSense)&#xff1f; 你是否想知道&#xff0c;有没有一种最简单的方法来运行你的 C 代码&#xff1f; 好消息是&#xff1a;我们在 C 扩展中添加了一些新功能&#xff0c;有了这些好东西&#xf…

Redis——关于它为什么快?使用场景?以及使用方式?为何引入多线程?

目录 1.既然redis那么快&#xff0c;为什么不用它做主数据库&#xff0c;只用它做缓存&#xff1f; 2.Redis 一般在什么场合下使用&#xff1f; 3.redis为什么这么快&#xff1f; 4.Redis为什么要引入了多线程&#xff1f; 1.既然redis那么快&#xff0c;为什么不用它做主数据…

解决Sublime Text V3.2.2中文乱码问题

目录 中文乱码出现情形通过安装插件来解决乱码问题 中文乱码出现情形 打开一个中文txt文件&#xff0c;显示乱码&#xff0c;在File->Reopen With Encoding里面找不到支持简体中文正常显示的编码选项。 通过安装插件来解决乱码问题 安装Package Control插件 打开Tool->…

Windows本地如何部署Jupyter+Notebook并结合内网穿透实现远程访问?

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

2024全网超全的测试类型详解,再也不怕面试答不出来了!

在软件测试工作过程中或者在面试过程中经常会被问到一些看起来简单但是总是有些回答不上的问题&#xff0c;比如你说说“黑盒测试和白盒测试的区别&#xff1f;”&#xff0c;“你们公司做灰度测试么&#xff1f;", ”α测试和β测试有什么不一样&#xff1f;“&#xff0…

MVC模式

Model-View-Controller : 模型-视图-控制器模式&#xff0c;用于应用程序的分层开发。 Model(模型)&#xff1a;代表一个存取数据的对象。也可以带有逻辑&#xff0c;在数据变化时更新控制器。 View(视图)&#xff1a;代表模型包含的数据的可视化。 Controller(控制器)&#xf…

C/C++ - 编程语法特性

目录 标准控制台框架 输入输出对象 命名空间 标准控制台框架 头文件 ​#include <iostream>​​ 告诉编译器我们要使用iostream库尖括号中的名字指定了某个头文件(header) 入口函数 ​int main(void)​​ 返回 ​return 0;​​ 输出语句 ​std::cout << "H…

代码随想录 Leetcode111. 二叉树的最小深度

题目&#xff1a; 代码(首刷自解 2024年1月24日&#xff09;&#xff1a; class Solution { public:int minDepth(TreeNode* root) {if(root nullptr) return 0;queue<TreeNode*> que;TreeNode* cur root;que.push(cur);int size 0;int depth 0;while (!que.empty()…

力扣hot100 螺旋矩阵 模拟

Problem: 54. 螺旋矩阵 文章目录 思路&#x1f496; 收缩边界法 思路 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f496; 收缩边界法 ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) class Solution {public List<Integer&g…

【C++干货基地】C++入门篇:输入输出流 | 缺省函数 | 函数重载(文末送书)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

【pyqt6】用pyqt做一个点菜小程序

用pyqt做一个点菜小程序 前言1.pyqt62. 功能介绍3.程序实现 前言 在本文中&#xff0c;我们将使用 PyQt6&#xff08;Python的GUI库&#xff09;创建一个简单的点菜小程序。该程序允许用户从菜单中选择菜品&#xff0c;将其添加到订单中&#xff0c;并通过点击“下单”按钮查看…