JS实现鼠标点击处烟花爆炸效果(面向对象版)

程序由网上开源“JS实现放烟花效果”代码改编,实现在鼠标点击处出现烟花爆炸效果。

改编前

源码link

https://github.com/xxxqiuzh/Tools/tree/master/JavaScript/fireWorks

Screenshot

烟花有一个先上升后爆炸的过程,截图只反映了爆炸后的瞬间。

改编后

源码:fireWorks.js

var fgm = {on: function (element, type, handler) {return element.addEventListener ? element.addEventListener(type, handler, false) : element.attachEvent("on" + type, handler)},un: function (element, type, handler) {return element.removeEventListener ? element.removeEventListener(type, handler, false) : element.detachEvent("on" + type, handler)},bind: function (object, handler) {return function () {return handler.apply(object, arguments)}},randomRange: function (lower, upper) {//产生范围在lower~upper的随机数return Math.floor(Math.random() * (upper - lower + 1) + lower)},getRanColor: function () {//随机获得十六进制颜色var str = this.randomRange(0, 0xFFFFFF).toString(16);while (str.length < 6) str = "0" + str;return "#" + str}
};
//初始化对象
function FireWorks() {this.type = 0;this.timer = null;this.fnManual = fgm.bind(this, this.manual)
}
FireWorks.prototype = {initialize: function () {clearTimeout(this.timer);fgm.un(document, "click", this.fnManual);switch (this.type) {case 1:fgm.on(document, "click", this.fnManual);break;};},manual: function (event) {event = event || window.event;this.__create__({x: event.clientX,y: event.clientY});},__create__: function (param) {//param即鼠标点击点(即烟花爆炸点)var that = this;var oChip = null;var aChip = [];var timer = null;var oFrag = document.createDocumentFragment();(function () {//在50-100之间随机生成碎片//由于IE浏览器处理效率低, 随机范围缩小至20-30//自动放烟花时, 随机范围缩小至20-30var len = (/msie/i.test(navigator.userAgent) || that.type == 2) ? fgm.randomRange(20, 30) : fgm.randomRange(50, 100)//产生所有烟花爆炸颗粒实体for (i = 0; i < len; i++) {//烟花颗粒形态实体oChip = document.createElement("div");with (oChip.style) {position = "absolute";top = param.y + document.body.scrollTop + "px";left = param.x + "px";width = "4px";height = "4px";overflow = "hidden";borderRadius = "4px";background = fgm.getRanColor();};oChip.speedX = fgm.randomRange(-20, 20);oChip.speedY = fgm.randomRange(-20, 20);oFrag.appendChild(oChip);aChip[i] = oChip};document.body.appendChild(oFrag);timer = setInterval(function () {for (i = 0; i < aChip.length; i++) {var obj = aChip[i];with (obj.style) {// top = obj.y + obj.speedY + "px";// console.log(document.body.scrollTop);// console.log(document.body.scrollHeight+"ww");// console.log(obj.offsetTop);top = obj.offsetTop + obj.speedY  + "px";left = obj.offsetLeft + obj.speedX + "px";};obj.speedY++;//判断烟花爆炸颗粒是否掉落至窗体之外,为真则remove//splice() 方法可删除从 index 处开始的零个或多个元素(obj.offsetTop < 0 || obj.offsetLeft < 0 || obj.offsetTop > document.documentElement.clientHeight + document.body.scrollTop || obj.offsetLeft > document.documentElement.clientWidth) && (document.body.removeChild(obj), aChip.splice(i, 1))};//判断烟花爆炸颗粒是否全部remove,为真则clearInterval(timer);!aChip[0] && clearInterval(timer);}, 30)})();}
};fgm.on(window, "load", function () {var oFireWorks = new FireWorks();oFireWorks.type = 1;oFireWorks.initialize();
});fgm.on(document, "contextmenu", function (event) {var oEvent = event || window.event;oEvent.preventDefault ? oEvent.preventDefault() : oEvent.returnValue = false
});

Screenshot

改编后的实际应用

JS实现鼠标点击处烟花爆炸效果相关推荐

  1. 鼠标点击烟花爆炸效果

    鼠标点击烟花爆炸效果 效果预览: 预览结果 一. 快速使用(引用我创建好的anime.min.js文件) <canvas class="fireworks"style=&qu ...

  2. qt创建右键菜单,显示在鼠标点击处

    引言 给窗口创建右键菜单,右键的时候,右键菜单出现在鼠标点击处.同时设置右键菜单的样式,右键菜单为圆角,起初设置样式的时候,右键菜单的背景在圆角边缘会出现黑色的方角,不能很好的显示为圆角,后来设置了右 ...

  3. JS实现鼠标点击展开/隐藏表格行

    <title>JS实现鼠标点击展开/隐藏表格行_网页代码站(www.webdm.cn)</title> <script language="javascript ...

  4. html点击鼠标页面出现爱心,js实现鼠标点击飘爱心效果

    本文实例为大家分享了js实现鼠标点击飘爱心的具体代码,供大家参考,具体内容如下 鼠标点击特效 html { cursor: pointer; } h3 { text-align: center; us ...

  5. html5统计鼠标点击的次数,怎么实现js统计鼠标点击次数

    学习前端的同学你们知道怎么JS实现在线统计一个页面内鼠标点击次数的方法吗?不知道的话跟着学习啦小编一起来学习JS实现在线统计一个页面内鼠标点击次数的方法. 本文实例讲述了JS实现在线统计一个页面内鼠标 ...

  6. 点击编辑框全选内容java,js实现鼠标点击文本框自动选中内容的方法

    本文实例讲述了js实现鼠标点击文本框自动选中内容的方法.分享给大家供大家参考.具体如下: 这里使用JS实现鼠标点击时自动选中文本框文本的效果,相信许多朋友都遇到这种功能的,就是当我们点击文本框的时候, ...

  7. 基于jquery鼠标点击图片翻开切换效果

    基于jquery鼠标点击图片翻开切换效果是一款基于jQuery+CSS3实现的点击图片切换特效.效果图如下: 在线预览    源码下载 实现的代码. html代码: <div class=&qu ...

  8. Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果

    Unity中的粒子系统可以用于制作特效,如开枪火花效果,简单爆炸效果等.(毕竟程序员不是设计师,简单的特效都没有问题,要制作一些非常美观的特效还是需要多了解跟美术有关的知识.) 粒子系统实现一个简单的 ...

  9. unity 彩带粒子_Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果

    Unity中的粒子系统可以用于制作特效,如开枪火花效果,简单爆炸效果等.(毕竟程序员不是设计师,简单的特效都没有问题,要制作一些非常美观的特效还是需要多了解跟美术有关的知识.) 粒子系统实现一个简单的 ...

最新文章

  1. 剑指offer5 从尾到头打印链表
  2. Spring 的设计初衷
  3. Spring Boot中使用@Async实现异步调用
  4. ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)
  5. CentOS6.9快速安装配置svn
  6. VS2015解决方案资源管理器空白,不显示内容
  7. 详解Transformer
  8. EOJ3536 求蛇形矩阵每一行的和---找规律
  9. 使用 Document!X 为自己的dll生成一个漂亮的说明文档
  10. 【Qt】NDK各版本下载
  11. 我的数据库是半瓶子水的水平
  12. java医疗保险系统_医疗保险管理系统设计 Java
  13. 基于单片机的电压电流表设计
  14. ASCII码对照表【2022年汇总】
  15. OJDBC驱动的关于日期的坑
  16. PHP 各种金融利息的计算方法
  17. v-text、v-html、v-cloak指令
  18. python 中的文件读写操作 and 例题
  19. BZOJ2757 : [SCOI2012]Blinker的仰慕者
  20. 一个40岁老程序员的学习之路,在别人为“中年危机”而忧愁时,你可以淡然处之

热门文章

  1. 请求赐教,恒波的软件
  2. 模拟器v3.1.2官方安卓版
  3. Linux日志巡检之日常操作及安全审计
  4. Error in stats::arima(x,order=order,seasonal=seasonal,fixed=par[1:narma],:wrong length for 'fixed'解决
  5. 解决IOS不能自动获取焦点问题
  6. mysql地名模糊匹配合并_调用百度地图API批量搜索地名并返回地址及坐标
  7. atm取款机 oracle实战训练_ATM取款机(Oracle)
  8. 和利时系统如何下装服务器,和利时服务器如何将A设置B
  9. rocksdb、tokudb、innodb引擎性能测试
  10. 当优秀成为了习惯,坚持又算的了什么?——英语活动