jQuery 打气球小游戏 点击气球爆炸效果

最近在学习前端,看到偶尔看到前端小游戏,就想自己写一个小游戏,奈何水平有限,只能写打气球这种简单的,所有的气球都是动态生成的,气球的颜色也是随机的

html部分

 <div class="container">
</div>

// 只创建了一个div大盒子用于游戏背景,所有的气球都是动态生成的
css部分
// .box位于.container的下一级,动态生成,用于存储气球
.box{
position:absolute;
width: 80px;
height: 80px;
bottom:-10px;
}
// 气球的样式
.box div{
position:absolute;
width:80px;
height:80px;
border-radius:44px 44px 44px 20px;
transform:rotate(-45deg) scale(1);
}
// 气球尾部的样式,.balloon是自动生成的气球,.clipped是为了产生爆炸效果,点击气球时生成的
.balloon:after,.clipped:after{
content:"";
height: 0;
width: 0;
display:block;
border-top:5px solid transparent;
border-right:5px solid transparent;
border-bottom:5px solid transparent;
transform:rotate(-45deg);
position:relative;
top:72px;
left:-7px;
}
// 气球形态是通过css中border来制作的,气球的尾部是在伪元素after中利用border边框完成的,气球的颜色是在在js中利用css属性给气球添加box-shadow属性实现的

js部分
//点击气球产生爆炸效果,并下降
$(function(){
var num=0;
var r,g,b;
function create(){
num ;
    //创建气球,添加颜色
r=Math.floor(Math.random()*256);
g=Math.floor(Math.random()*256);
b=Math.floor(Math.random()*256);
var box=$("<div class='box'>").appendTo(".container");
var ele=$("<div class='balloon'>").appendTo(box).
css({"boxShadow":"-10px 10px 25px" " rgb(" r "," g "," b ") " "inset",
"border":"1px solid" " rgb(" r "," g "," b ")"}).addClass("balloon" num);
box.css({"left":Math.random()*($("body").width()-40)});
      //给伪元素添加样式的方法有多种,这里用了给元素添加一个style样式,style标签中是伪元素样式
ele.append("<style>.balloon" num ":after{border-left:15px solid " "rgb(" r "," g "," b ")}</style>");
}
setInterval(function(){
create();
},2000);
//移动
function move(){
var timer=setInterval(function(){
$(".box").css({"bottom":" =3"});
},50);
}
move();
//产生任意值
function rand(max,min){
return Math.floor(Math.random()*(max-min) min)
}
//点击气球爆炸
//创造碎片
  //动态创建的元素添加事件利用$("")是选取不到的,必须凌on来绑定
//$(".container .box").on("click",".box",function(){ 这样是不行的
$(".container").on("click",".box",function(){
var $b = $(".balloon");
var count = 4;
var width = $b.width() / count;
var height = $b.width() / count;
var y = 0;
var color = $(this).find(".balloon").css("boxShadow").split(" ");
//创建16个气球碎片
for (var z = 0; z <= count * width; z = width) {
        // 创建了在一个盒子里创建了16个与盒子中已有的气球一样样式的气球,并利用clip:rect(上,右,下,左)样式对16个气球进行裁剪,构成气球碎片
$(this).append("<div class='clipped' style='clip:rect(" y "px," (z width) 'px,' (y height) "px," z "px" ")'>");
if (z === (count * width) - width) {
y = height;
z = -width;
}
if (y === (count * height)) {
z = 99999;
} } $(this).find(".balloon").remove(); //给碎片添加样式 $(this).find(".clipped").each(function (i,val) { $(this).css({"boxShadow": color.join(" ")}); $(this).append("<style>.clipped:after{border-left:15px solid " color[0] color[1] color[2] "}</style>"); var v=rand(120,90), angle=rand(89,80), theta=(angle*Math.PI)/180, g=-9.8, t=0, nx,ny; var navigate=[-1,0,1]; var direction=navigate[Math.floor(Math.random()*navigate.length)]; var randDeg=rand(10,-5); var randScale=rand(1.1,0.9); var randDeg2=rand(30,5); var self=$(this); $(this).css( {"transform":"rotateZ(" randDeg2 "deg) " "scale(" randScale ") " "skew(" randDeg ")"} ); var z=setInterval(function(){ var ux=(Math.cos(theta)*v)*direction; var uy=(Math.sin(theta)*v)-(-g)*t; nx=ux*t; ny=uy*t 0.5*Math.pow(t,2)*g; self.css({"bottom":ny "px","left":nx "px"}); t =0.1; if(t>=15){ clearInterval(z); self.remove(); } },10); }); });});
}
$(this).find(".balloon").remove();
//给碎片添加样式
利用each遍历给每个气球添加不同样式,偏转角度,放大缩小,水平速度,垂直速度等
$(this).find(".clipped").each(function (i,val) {
$(this).css({"boxShadow": color.join(" ")});
$(this).append("<style>.clipped:after{border-left:15px solid " color[0] color[1] color[2] "}</style>");
var v=rand(120,90), angle=rand(89,80), theta=(angle*Math.PI)/180, g=-9.8, t=0, nx,ny;
var navigate=[-1,0,1];
var direction=navigate[Math.floor(Math.random()*navigate.length)];
var randDeg=rand(10,-5);
var randScale=rand(1.1,0.9);
var randDeg2=rand(30,5);
var self=$(this);
$(this).css(
{"transform":"rotateZ(" randDeg2 "deg) " "scale(" randScale ") " "skew(" randDeg ")"}
);
// 添加一个定时器,利用定位是碎片动起来,当时间超过15s时停止定时器,并删除碎片,减少节点数量,减轻页面加载压力
var z=setInterval(function(){
var ux=(Math.cos(theta)*v)*direction;
var uy=(Math.sin(theta)*v)-(-g)*t;
nx=ux*t;
ny=uy*t 0.5*Math.pow(t,2)*g;
self.css({"bottom":ny "px","left":nx "px"});
t =0.1;
if(t>=15){
clearInterval(z);
self.remove();
}
},10);
});

});

});
 
 

更多专业前端知识,请上 【猿2048】www.mk2048.com

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

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

相关文章

智能提示和那些值得崇拜的人

VisualStudio的智能提示功能越来越强&#xff0c;这为我们提供了很多方便但同时它带来的负面影响最近也一直受到关注。VS的目的是降低开发门槛&#xff0c;这一项他们非常夸张的做到了&#xff0c;之所以说夸张是因为因为它的简单&#xff0c;甚至有逻辑能力欠发达的人成为程序…

P1047 校门外的树

P1047 题目描述 某校大门外长度为L的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴&#xff0c;马路的一端在数轴0的位置&#xff0c;另一端在L的位置&#xff1b;数轴上的每个整数点&#xff0c;即0,1,2,…,L&#xff0c;都种有一棵…

.Net Core Swagger:Actions require an explicit HttpMethod binding for Swagger 2.0

添加完Swagger包引用后运行报错&#xff1a;Actions require an explicit HttpMethod binding for Swagger 2.0 第一时间想到了父类控制器 没有添加 [HttpPost] 之类的特性 添加后就可以解决这个报错原因 但是我的父类控制器里的两个方法只是为了做返回值的一些处理&#xff0c…

matlab impdt,实验1 基于Matlab的数字信号处理基本操作

图1-7 离散时间信号的基本运算及波形图>>title(x2(n)),axis([-15 15 0 1]) >>subplot(413)>>stem(n3,x,fill),grid on >>title(x3(n)),axis([-15 15 0 1]) >>subplot(414)>>stem(n4,x,fill),grid on >>title(x4(n)),axis([-15 15 0 …

通过Katas进行Java教程:网球比赛(轻松)

编程kata是一种练习&#xff0c;可以帮助程序员通过练习和重复练习来磨练自己的技能。 本文是“通过Katas的Java教程”系列的一部分。 文章分为易&#xff0c;中和难。 Fizz Buzz&#xff08;轻松&#xff09; -Java 7 柏林时钟&#xff08;简易&#xff09; – Java 7和8 …

关于动画的几种状态表示的含义以及能够使用2d动画表述为什么要使用3d动画表述

transform 四种转换 translate 位置scale 缩放rotate 旋转skew 倾斜 以上四种转换方式是比较特殊的&#xff0c;其实他们都是由matrix 矩阵转换来&#xff1b; animation的五种状态 动画速度这些曲线称之为贝塞尔曲线CSS88 这是一个css有关的网站&#xff1b;ease 由快到慢 最…

画函数图形的C#程序(改进版) (转)

我在10月份发表过一篇随笔“画函数图形的C#程序&#xff0c;兼论一个病态函数”&#xff0c;在那篇随笔中写道&#xff1a; 这个画函数图形的C#程序有一个严重的缺点&#xff0c;就是函数表达式是直接写的源程序中的&#xff0c;不能象SciLab和Matlab那样交互式地输入。 后来&a…

Swift-UITextView占位文字及占位文字颜色扩展(可在xib中直接使用)

使用案例 extension UITextView {private struct RuntimeKey {static let hw_placeholderLabelKey UnsafeRawPointer.init(bitPattern: "hw_placeholderLabelKey".hashValue)/// ...其他Key声明}/// 占位文字IBInspectable public var placeholder: String {get {re…

Easy.Ajax 部分源代码, 支持文件上传功能, 兼容所有主流浏览器

下面是Easy.Ajax类的初稿&#xff0c;如须发表&#xff0c;在代码上还要修改以达到最简&#xff0c;但API是不会变了&#xff0c; Easy.Ajax (function (WINDOW) {ajax {proxyPool: {length: function () {var i 0;for (var p in this)i;return i - 1;}},index: 0,clearCach…

Java 8中Lambda表达式的阴暗面

这篇文章可能不会使我成为任何新朋友。 哦&#xff0c;好吧&#xff0c;无论如何我从来没有真正在学校受到欢迎。 但是&#xff0c;让我们说清楚。 就语言而言&#xff0c;Java 8的最大特色无疑是Lambda表达式。 几年来&#xff0c;它一直是功能语言&#xff08;例如Scala和Clo…

复旦大学长跑协会财务制度(初稿)

(一)活动资金来源及主要支出 1、资金主要来源&#xff1a;会费、学校的拨款&#xff0c;私人捐助、企业赞助等。 2、活动性支出&#xff1a;活动宣传、场地租用费、租借多媒体仪器费用及活动经费。事物性支出&#xff1a;协会运作所需物资(如文具等硬件)。 (二)财务报销原则 1、…

JQ实现弹幕效果

JQ实现弹幕效果&#xff0c;快来吐糟你的想法吧 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>JQ实现弹幕效果</title><style type"t…

Iterator作用

前言 下面的内容是我从百度知道拷贝出来的&#xff0c;也就不在贴出链接了。我总结下就是迭代器在集合中使用&#xff0c;用户不需要关心具体集合实现的是如何遍历&#xff08;不暴露细节&#xff09;&#xff0c;按照迭代器的方式遍历。 作用 Iterator模式是用于遍历集合类的标…

Django:URL映射

导航 跳转&#xff1a;视图简介 跳转&#xff1a;URL映射 跳转&#xff1a;一、URL中添加参数 跳转&#xff1a;二、指定默认的参数 跳转&#xff1a;三、URL中包含另一个urls模块 跳转&#xff1a;  include函数 跳转&#xff1a;四、path函数 跳转&#xff1a;  自定义ur…

php-v 查看不到版本,解決php -v查看到版本於phpinfo()打印的版本不一致問題

整個事件的起因是這樣的通過git拉取laraevl項目發現缺少.env文件&#xff0c;打算使用composer install生成一個.env文件&#xff0c;然后提示composer最低使用php版本7.1.3而檢測到我的版本為5.4.16。提示如下&#xff1a;然后使用phpinfo打印一下發現版本是7.2.6。打印結果如…

将jOOQ与Spring结合使用:排序和分页

JOOQ是一个库&#xff0c;可以帮助我们控制SQL。 它可以从我们的数据库生成代码&#xff0c;并允许我们使用其流畅的API来构建类型安全的数据库查询。 本教程前面的部分向我们介绍了如何配置应用程序的应用程序上下文&#xff0c;如何从数据库生成代码以及如何将CRUD操作添加到…

获取表的所有列名

selectname fromsyscolumns whereidobject_id(表名)下面这样也可以:selectcolumn_name frominformation_schema.columns wheretable_name news转载于:https://www.cnblogs.com/zhuboxingzbx/archive/2007/09/03/880049.html

天下武功唯快不破------实验吧

题目地址&#xff1a;http://www.shiyanbar.com/ctf/1854 打开链接 全是英文&#xff0c;能力有限&#xff0c;翻译一下&#xff0c;好像没其他东西了&#xff0c;查看一下源码 让用post请求&#xff0c;丢到burp改一下 看到response有一个FLAG: UDBTVF9USElTX1QwX0NINE5HRV9GT…

JS实现文本中查找并替换字符

JS实现文本中查找并替换字符 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html><html> <head><style type"text/css">*{font-family:"微软雅黑";font-size:16px;margin:0;padding:0;letter-spaci…

数据依赖的公理系统

ArmStrong公理系统 学习数据依赖的公理系统是进行模式分解的算法的理论基础。而Armstrong公理系统是一个具有有效性和完备性的公理系统。 U是属性总体&#xff0c;F是函数依赖&#xff0c;对于R<U,F>推理规则如下&#xff1a; A1 自反律 &#xff1a;若Y⊆X⊆U&#xff0…