【HTML+CSS+JavaScript】实现鼠标点击烟花效果

news2025/1/17 23:19:52

文章目录

  • 【HTML+CSS+JavaScript】实现鼠标点击烟花效果(爆炸型、心型、圆形)
    • 一. 效果图
    • 二. 鼠标点击烟花效果 - 心型实现代码
      • (1) HTML部分代码
      • (2) CSS部分代码
      • (3) 内部的JavaScript部分代码
    • 三. 鼠标点击烟花效果 - 圆型实现代码
      • (1) HTML部分代码
      • (2) CSS部分代码
      • (3) 内部的JavaScript部分代码
    • 四. 鼠标点击烟花效果 - 爆炸型实现代码
      • (1) HTML部分代码
      • (2) CSS部分代码
      • (3) 内部的JavaScript部分代码
    • 五. 共同引用的JavaScript部分代码
    • 六. 完整的代码和图片获取

【HTML+CSS+JavaScript】实现鼠标点击烟花效果(爆炸型、心型、圆形)

本文主要讲解三种烟花效果(爆炸型、心型、圆形),文章末尾附有完整的代码和图片获取链接。

一. 效果图

效果图(一) - 心型

请添加图片描述

效果图(二) - 圆型

请添加图片描述

效果图(三) - 爆炸型

请添加图片描述

二. 鼠标点击烟花效果 - 心型实现代码

(1) HTML部分代码

<!-- 引入外部的js代码 -->
<script type="text/javascript" src="buffermove1.js"></script> 

(2) CSS部分代码

* {
    padding: 0px;
    margin: 0px;
}

body {
    background: #000;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

(3) 内部的JavaScript部分代码

//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。
function Fireworks(x, y) { //x,y鼠标的位置
    this.x = x;
    this.y = y;
    var that = this;
    //1.创建烟花。
    this.ceratefirework = function() {
        this.firework = document.createElement('div'); //整个构造函数内部都可以使用
        this.firework.style.cssText = `width:5px;height:5px;background:#fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;`;
        document.body.appendChild(this.firework);
        this.fireworkmove();
    };
    //2.烟花运动和消失
    this.fireworkmove = function() {
        buffermove(this.firework, {
            top: this.y
        }, function() {
            document.body.removeChild(that.firework); //烟花消失,碎片产生
            that.fireworkfragment();
        });
    };
    //3.创建烟花的碎片
    this.fireworkfragment = function() {
        var num = this.ranNum(30, 60); //盒子的个数
        this.perRadio = 2 * Math.PI / num; //弧度
        for (var i = 0; i < num; i++) {
            this.fragment = document.createElement('div');
            this.fragment.style.cssText = `width:5px;height:5px;background:rgb(${this.ranNum(0, 255)},${this.ranNum(0, 255)},${this.ranNum(0, 255)});position:absolute;left:${this.x}px;top:${this.y}px;`;
            document.body.appendChild(this.fragment);
            this.fireworkboom(this.fragment, i); //将当前创建的碎片传过去,方便运动和删除
        }
    }
    //4.碎片运动
    this.fireworkboom = function(obj, i) { //obj:创建的碎片
        var r = 0.1;
        obj.timer = setInterval(function() { //一个盒子运动
            r += 0.4;
            if (r >= 10) {
                clearInterval(obj.timer);
                document.body.removeChild(obj);
            }
            obj.style.left = that.x + 16 * Math.pow(Math.sin(that.perRadio * i), 3) * r + 'px';
            obj.style.top = that.y - (13 * Math.cos(that.perRadio * i) - 5 * Math.cos(2 * that.perRadio * i) - 2 * Math.cos(3 * that.perRadio * i) - Math.cos(4 * that.perRadio * i)) * r + 'px';
        }, 20);
    }
    //随机方法
    this.ranNum = function(min, max) {
        return Math.round(Math.random() * (max - min)) + min;
    };
}
document.onclick = function(ev) {
    var ev = ev || window.event;
    new Fireworks(ev.clientX, ev.clientY).ceratefirework();
}

三. 鼠标点击烟花效果 - 圆型实现代码

(1) HTML部分代码

<!-- 引入外部的js代码 -->
<script type="text/javascript" src="buffermove1.js"></script> 

(2) CSS部分代码

* {
    padding: 0px;
    margin: 0px;
}

body {
    background: #000;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

(3) 内部的JavaScript部分代码

//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。
function Fireworks(x, y) { //x,y鼠标的位置
    this.x = x;
    this.y = y;
    var that = this;
    //1.创建烟花。
    this.ceratefirework = function() {
        this.firework = document.createElement('div'); //整个构造函数内部都可以使用
        this.firework.style.cssText = `width:5px;height:5px;background:#fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;`;
        document.body.appendChild(this.firework);
        this.fireworkmove();
    };
    //2.烟花运动和消失
    this.fireworkmove = function() {
        var that = this;
        buffermove(this.firework, {
            top: this.y
        }, function() {
            document.body.removeChild(that.firework); //烟花消失,碎片产生
            that.fireworkfragment();
        });
    };
    //3.创建烟花的碎片
    this.fireworkfragment = function() {
        var num = this.ranNum(30, 60); //盒子的个数
        this.perRadio = 2 * Math.PI / num; //弧度
        for (var i = 0; i < num; i++) {
            this.fragment = document.createElement('div');
            this.fragment.style.cssText = `width:5px;height:5px;background:rgb(${this.ranNum(0, 255)},${this.ranNum(0, 255)},${this.ranNum(0, 255)});position:absolute;left:${this.x}px;top:${this.y}px;`;
            document.body.appendChild(this.fragment);
            this.fireworkboom(this.fragment, i); //将当前创建的碎片传过去,方便运动和删除
        }
    }
    //4.碎片运动
    this.fireworkboom = function(obj, i) { //obj:创建的碎片
        var r = 10;
        obj.timer = setInterval(function() { //一个盒子运动
            r += 4;
            if (r >= 200) {
                clearInterval(obj.timer);
                document.body.removeChild(obj);
            }
            obj.style.left = that.x + Math.sin(that.perRadio * i) * r + 'px';
            obj.style.top = that.y + Math.cos(that.perRadio * i) * r + 'px';
        }, 20);
    }
    //随机方法
    this.ranNum = function(min, max) {
        return Math.round(Math.random() * (max - min)) + min;
    };
}
document.onclick = function(ev) {
    var ev = ev || window.event;
    new Fireworks(ev.clientX, ev.clientY).ceratefirework();
}

四. 鼠标点击烟花效果 - 爆炸型实现代码

(1) HTML部分代码

<!-- 引入外部的js代码 -->
<script type="text/javascript" src="buffermove1.js"></script> 

(2) CSS部分代码

* {
    padding: 0px;
    margin: 0px;
}

body {
    background: #000;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

(3) 内部的JavaScript部分代码

//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。
function Fireworks(x, y) { //x,y鼠标的位置
    this.x = x;
    this.y = y;
    var that = this;
    //1.创建烟花。
    this.ceratefirework = function() {
        this.firework = document.createElement('div'); //整个构造函数内部都可以使用
        this.firework.style.cssText = `width:5px;height:5px;background:#fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;`;
        document.body.appendChild(this.firework);
        this.fireworkmove();
    };
    //2.烟花运动和消失
    this.fireworkmove = function() {
        buffermove(this.firework, {
            top: this.y
        }, function() {
            document.body.removeChild(that.firework); //烟花消失,碎片产生
            that.fireworkfragment();
        });
    };
    //3.创建烟花的碎片
    this.fireworkfragment = function() {
        for (var i = 0; i < this.ranNum(30, 60); i++) {
            this.fragment = document.createElement('div');
            this.fragment.style.cssText = `width:5px;height:5px;background:rgb(${this.ranNum(0, 255)},${this.ranNum(0, 255)},${this.ranNum(0, 255)});position:absolute;left:${this.x}px;top:${this.y}px;`;
            document.body.appendChild(this.fragment);
            this.fireworkboom(this.fragment); //将当前创建的碎片传过去,方便运动和删除
        }
    }

    //4.碎片运动
    this.fireworkboom = function(obj) { //obj:创建的碎片

        //设点速度(值不同,正负符号不同)
        var speedx = parseInt((Math.random() > 0.5 ? '-' : '') + this.ranNum(1, 15));
        var speedy = parseInt((Math.random() > 0.5 ? '-' : '') + this.ranNum(1, 15));

        //初始速度
        var initx = this.x;
        var inity = this.y;
        obj.timer = setInterval(function() { //一个盒子运动
            initx += speedx;
            inity += speedy;
            if (inity >= document.documentElement.clientHeight) {
                clearInterval(obj.timer);
                document.body.removeChild(obj);
            }
            obj.style.left = initx + 'px';
            obj.style.top = inity + 'px';
        }, 20);

    }

    //随机方法
    this.ranNum = function(min, max) {
        return Math.round(Math.random() * (max - min)) + min;
    };
}


document.onclick = function(ev) {
    var ev = ev || window.event;
    new Fireworks(ev.clientX, ev.clientY).ceratefirework();
}

五. 共同引用的JavaScript部分代码

function getstyle(obj, attr) {
    if (window.getComputedStyle) {
        //标准
        return getComputedStyle(obj)[attr]
    } else {
        //IE
        return obj.currentStyle[attr]
    }
}

function buffermove(obj, json, fn) {
    var speed = 0
    clearInterval(obj.timer)
    obj.timer = setInterval(function() {
        var bstop = true
        for (var attr in json) {
            var currentvalue = 0
            if (attr === 'opacity') {
                currentvalue = Math.round(getstyle(obj, attr) * 100)
            } else {
                currentvalue = parseInt(getstyle(obj, attr))
            }
            speed = (json[attr] - currentvalue) / 10
            speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
            if (currentvalue != json[attr]) {
                if (attr === 'opacity') {
                    obj.style.opacity = (currentvalue + speed) / 100
                    obj.style.filter = 'alpha(opacity:' + (currentvalue + speed) + ')'
                } else {
                    obj.style[attr] = currentvalue + speed + 'px'
                }
                bstop = false
            }
        }
        if (bstop) {
            clearInterval(obj.timer)
            fn && fn()
        }
    }, 5)
}

六. 完整的代码和图片获取

:细心地网友估计已经发现三种效果的CSS和HTML这两部分的代码其实是一样的。

完整的代码和图片获取方式

链接:https://pan.baidu.com/s/16kbVr5pOcBqxdCRfs-GJnA?pwd=yhxg 
提取码:yhxg

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

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

相关文章

【mysql】优化系列文章之一-索引

mysql优化系列 不是教程&#xff0c;不是官方文档&#xff0c;而是自己实战的点滴记录&#xff0c;不一定适合新手和系统学习者 第一章 mysql索引 文章目录mysql优化系列前言1、Mysql索引2、B Tree2.1.特点2.2. 结构分解2.3. 例题分析2.4. 验证索引2.5.索引插入耗时3. MySQL 中…

Oracle数据库同步复制工具Beedup产品功能(一)

1、全量复制 Beedup全量复制功能通过遍历比对主从库用户模式及其下包含的各类对象来保证主从库的相关对象一致性。 支持角色、用户、架构、登录用户、表 (列定义 主外键 索引)、视图存储过程、函数、触发器、类型、类型体、包、包体、序列、同义词、数据库链接等对象复制全量…

技术干货 | 人大金仓KFS基于分区索引的分片入库技术解析

在之前的文章《技术干货&#xff1a;人大金仓KFS精准过滤和分片并行入库技术解析》中&#xff0c;KFS利用分片并行入库技术&#xff0c;解决了某金融POC数据同步项目中数据入库持续积压问题。经过优化后&#xff0c;在200并发的压测场景中&#xff0c;整体同步性能指标从压测30…

基于BP神经网络、RBF神经网络以及PSO优化的RBF神经网络进行数据的预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

IT30--IT之职能部门(3年之约已满)

IT作为一个职能部门&#xff0c;肯定跟业务不同&#xff0c;具体有哪些事情要做&#xff0c;我们一一道来。 年终规划的二三事 组织体系规划及梳理 预算编制 今天我们先来说说组织体系规划。 1 从愿景使命价值观到行动及思考方法 无论是企业还是部门&#xff0c;软文件建设肯…

【信息检索与数据挖掘期末笔记】(六)Link Analysis

Web图 将Web当做有向图 节点&#xff1a;网页 边&#xff1a;超链接 PageRank 不同网页的重要性是不同的&#xff0c;在web-graph中&#xff0c;节点之间的连接性有巨大的差异。我们根据链接结果来对网页进行排序 想法&#xff1a;用链接来投票 如果有更多的链接指向一个网…

Linux Shell 编程,Shell 变量详解

Linux Shell 编程&#xff0c;Shell 变量详解1.第一个shell脚本2.Shell 变量初探3.位置参数变量4.预定义变量1.第一个shell脚本 打开文本编辑器(可以使用 vi/vim 命令来创建文件)&#xff0c;新建一个文件 hello.sh&#xff0c;扩展名为 sh&#xff08;sh代表shell&#xff09…

【算法】面试题 - 链表(附讲解视频)

链表相关面试题876. 链表的中间结点206. 反转链表86. 分隔链表160. 相交链表141. 环形链表问题&#xff1a;快慢指针为什么一定会相遇142. 环形链表 II问题&#xff1a;如何确认入口237. 删除链表中的节点19. 删除链表的倒数第 N 个结点21. 合并两个有序链表23. 合并K个升序链表…

【记忆增强深度条件展开网络】

Memory-augmented Deep Conditional Unfolding Network for Pan-sharpening &#xff08;面向全色锐化的记忆增强深度条件展开网络&#xff09; 全色锐化旨在为遥感系统获取高分辨率的多光谱图像&#xff0c;基于深度学习的方法已经取得了显著的成功。然而&#xff0c;大多数…

使用iServer rest api如何实现构建巷道效果

作者&#xff1a;刘大 背景 在实际生产环境中&#xff0c;特别是在采矿&#xff0c;公路建设项目上&#xff0c;我们往往会接触下图所示的巷道&#xff0c;那么在Web端如何快速通过线数据构建巷道模型呢&#xff1f;下面我们来详细说下 使用方式 第一步&#xff1a; 在iServe…

反垃圾邮件系统|基于Springboot+vue 实现反垃圾邮件系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

servlet(二)文件的上传

servlet实现文件的上传 文件上传是一个web应用常见的功能 比如&#xff1a;QQ头像&#xff0c;就使用了上传。 邮箱中也有附件的上传和下载功能。 OA系统中审批有附件材料的上传。 1.1前端需要有个form表单标签 methodpost请求 (因为post请求是没有长度限制&#xff0c;get…

Computer Graphics From Scratch - Chapter 7

系列文章目录 简介&#xff1a;Computer Graphics From Scratch-《从零开始的计算机图形学》简介 第一章: Computer Graphics From Scratch - Chapter 1 介绍性概念 第二章&#xff1a;Computer Graphics From Scratch - Chapter 2 基本光线追踪 第三章&#xff1a;Computer Gr…

新生儿喝奶后不要马上放回床上睡觉,为宝宝健康着想,先做1件事

看到一个问题&#xff0c;题主问&#xff0c;新生儿喝完奶能马上放回床上睡觉吗&#xff1f;可以吗&#xff1f;也许每个人都认为照顾新生儿是一件非常简单的事情&#xff0c;因为新生儿几乎整天都在睡觉。当他们饿的时候&#xff0c;他们会让他们的宝宝吃牛奶。他们吃饱了就要…

博客搭建教程(一):静态博客 GitHub + Gridea

同步blog文章 注册一个 Github 账号并创建仓库 注册Github账号 如果你没有 Github 的账号&#xff0c;那么可以进入 官网 开始注册&#xff08;注意一下用户名的填写&#xff0c;如果不使用自定义域名&#xff0c;用户名将会是你的 Github 分配给你的域名&#xff0c;例如你的…

D. George and Interesting Graph(最大匹配)

Problem - 387D - Codeforces 乔治喜欢图表。最重要的是&#xff0c;他喜欢有趣的图。我们将假设一个有向图是有趣的&#xff0c;如果它符合以下标准。 该图不包含任何多弧。 有一个顶点v&#xff08;我们称她为中心&#xff09;&#xff0c;这样对于图形u的任何顶点&#xff…

信息网络传播视听节目服务单位的设立与经营

一、行业准入 &#xff08;一&#xff09;网络视听业务准入范围 利用公共互联网&#xff08;含移动互联网&#xff09;向计算机、手机用户提供视听节目服务&#xff08;不含交互式网络电视&#xff08;IPTV&#xff09;、互联网电视、专网手机电视业务&#xff09;业务的&…

几个小设置让 mac 更好用

今天在 youtube 上看到一个视频[1]&#xff0c;讲新 mac 到手后一定要做的几个设置&#xff0c;有几个之前我不知道的小设置&#xff0c;非常好用&#xff0c;看完马上就用上了。一些常用的就不列了&#xff0c;比如说设置点按、三指拖拽&#xff0c;不知道的可以去搜索了解&am…

【Python数据可视化】使用geoplotlib绘制地理空间数据

geoplotlib前言一、安装geoplotlib包二、读取csv数据使用1.点密度可视化2.直方图3. Voronoi图总结前言 ❤️❤️希望大家能多多点赞。❤️❤️ 需要数据集的可以评论。 Geoplotlib 是地理空间数据可视化的开源Python库&#xff0c;包含了大量的地理空间可视化操作&#xff0c…

131. 分割回文串

131. 分割回文串 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”]…