基于JQuery+PHP编写砸金蛋中奖程序


Posted in PHP onSeptember 08, 2015

首先给大家展示效果图:

基于JQuery+PHP编写砸金蛋中奖程序

查看演示 下载源码

准备工作

我们需要准备道具(素材),即相关图片,包括金蛋图片、蛋砸碎后的图片、砸碎后的碎花图片、以及锤子图片。

HTML

我们页面上要展现的是一个砸金蛋的台子,台上放了编号为1,2,3的三个金蛋,以及一把锤子。我们构建以下html代码:

<div class="egg"> 
 <ul class="eggList"> 
 <p class="hammer" id="hammer">锤子</p> 
 <p class="resultTip" id="resultTip"><b id="result"></b></p> 
 <li><span>1</span><sup></sup></li> 
 <li><span>2</span><sup></sup></li> 
 <li><span>3</span><sup></sup></li> 
 </ul> 
</div>

上述代码中,.hammer放置锤子,.resultTip用于砸蛋后显示的结果,即有没有中奖,三个li分别放置3个金蛋,我们用CSS来装饰下效果。

CSS

.egg{width:660px; height:400px; margin:50px auto 20px auto;} 
.egg ul li{z-index:999;} 
.eggList{padding-top:110px;position:relative;width:660px;} 
.eggList li{float:left;background:url(images/egg_1.png) no-repeat bottom;width:158px; 
height:187px;cursor:pointer;position:relative;margin-left:35px;} 
.eggList li span{position:absolute; width:30px; height:60px; left:68px; top:64px; color:#ff0; 
 font-size:42px; font-weight:bold} 
.eggList li.curr{background:url(images/egg_2.png) no-repeat bottom;cursor:default;z-index:300;} 
.eggList li.curr sup{position:absolute;background:url(images/img-4.png) no-repeat;width:232px; 
height:181px;top:-36px;left:-34px;z-index:800;} 
.hammer{background:url(images/img-6.png) no-repeat;width:74px;height:87px;position:absolute; 
text-indent:-9999px;z-index:150;left:168px;top:100px;} 
.resultTip{position:absolute; background:#ffc ;width:148px;padding:6px;z-index:500;top:200px; 
left:10px; color:#f60; text-align:center;overflow:hidden;display:none;z-index:500;} 
.resultTip b{font-size:14px;line-height:24px;}

按照上面的代码我们可以在页面中看到一个完整的砸金蛋场景,注意我们使用了png图片,如果你的客户仍在使用ie6的话,你可能需要对png图片的透明做处理,本文不做处理。

jQuery

接下来,我们要用jQuery代码来实现砸金蛋、碎蛋、展示中奖结果的整个过程。当然,老规矩,对于才用jQuery实现的实例程序,你必须先载入jQuery库文件。

首先,当鼠标滑向金蛋时,用于砸金蛋的锤子会仅靠金蛋右上方,可以使用position()来定位。

$(".eggList li").hover(function() { 
 var posL = $(this).position().left + $(this).width(); 
 $("#hammer").show().css('left', posL); 
})

然后,点击金蛋,即挥动锤子砸向金蛋的过程。我们在click中先把金蛋中的编号数字隐藏,然后调用自定义函数eggClick()。

$(".eggList li").click(function() { 
 $(this).children("span").hide(); 
 eggClick($(this)); 
});

最后,在自定义函数eggClick()中,我们使用jQuery的$.getJSON方法向后台data.php发送一个ajax请求,后台php程序会处理奖项分配并把中奖结果返回。我们使用animate()来实现砸锤子的动画,通过改变锤子的top和left位子来实现简单的动画效果,锤子砸下去后,金蛋样式变为.curr,同时金花四溅,然后中奖结果.resultTip展示,有没有中奖要看你的运气和后台奖项设置的中奖几率了。来看砸金蛋函数eggClick()的代码:

function eggClick(obj) { 
 var _this = obj; 
 $.getJSON("data.php",function(res){//ajax请求 
 _this.unbind('click'); //解除click 
 $(".hammer").css({"top":_this.position().top-55,"left":_this.position().left+185}); 
 $(".hammer").animate({//锤子动画 
 "top":_this.position().top-25, 
 "left":_this.position().left+125 
 },30,function(){ 
 _this.addClass("curr"); //蛋碎效果 
 _this.find("sup").show(); //金花四溅 
 $(".hammer").hide();//隐藏锤子 
 $('.resultTip').css({display:'block',top:'100px',left:_this.position(). 
 left+45,opacity:0}) 
 .animate({top: '50px',opacity:1},300,function(){//中奖结果动画 
  if(res.msg==1){//返回结果 
  $("#result").html("恭喜,您中得"+res.prize+"!"); 
  }else{ 
  $("#result").html("很遗憾,您没能中奖!"); 
  } 
 }); 
 } 
 ); 
 }); 
}

为了将砸金蛋程序更真实的结合到你的网站中,你可以在砸蛋前验证会员身份,限制砸蛋次数、砸蛋中奖后留下联系方式等等措施,具体看网站需求了。

PHP

data.php处理前端发送的ajax请求,我们才用概率算法,根据设置好的中奖概率,将中奖结果以json的格式输出。关于概率计算的例子可以参照:PHP+jQuery实现翻板抽奖

$prize_arr = array( 
 '0' => array('id'=>1,'prize'=>'平板电脑','v'=>3), 
 '1' => array('id'=>2,'prize'=>'数码相机','v'=>5), 
 '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10), 
 '3' => array('id'=>4,'prize'=>'4G优盘','v'=>12), 
 '4' => array('id'=>5,'prize'=>'Q币10元','v'=>20), 
 '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50), 
); 
foreach ($prize_arr as $key => $val) { 
 $arr[$val['id']] = $val['v']; 
} 
$rid = getRand($arr); //根据概率获取奖项id 
$res['msg'] = ($rid==6)?0:1; //如果为0则没中 
$res['prize'] = $prize_arr[$rid-1]['prize']; //中奖项 
echo json_encode($res); 
//计算概率 
function getRand($proArr) { 
 $result = ''; 
 //概率数组的总概率精度 
 $proSum = array_sum($proArr); 
 //概率数组循环 
 foreach ($proArr as $key => $proCur) { 
 $randNum = mt_rand(1, $proSum); 
 if ($randNum <= $proCur) { 
 $result = $key; 
 break; 
 } else { 
 $proSum -= $proCur; 
 } 
 } 
 unset ($proArr); 
 return $result; 
}

通过设置概率,我们可以看出,砸中平板电脑的几率占3%,砸不中的几率占50%,点击演示demo来试试你的运气吧。

PHP 相关文章推荐
图书管理程序(二)
Oct 09 PHP
joomla jce editor 解决上传中文名文件失败问题
Jun 09 PHP
php动态生成函数示例
Mar 21 PHP
php实例分享之二维数组排序
May 15 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
四个常见html网页乱码问题及解决办法
Sep 08 #PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 #PHP
php验证码实现代码(3种)
Sep 07 #PHP
PHP Web木马扫描器代码分享
Sep 06 #PHP
使用php-timeit估计php函数的执行时间
Sep 06 #PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 #PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 #PHP
You might like
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
基于php无限分类的深入理解
2013/06/02 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
HTML5实现留言和回复页面样式
2015/07/22 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Python中的默认参数详解
2015/06/24 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
python重要函数eval多种用法解析
2020/01/14 Python
多个python文件调用logging模块报错误
2020/02/12 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
大连星海广场导游词
2015/02/10 职场文书
地球一小时活动总结
2015/02/27 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
python双向链表实例详解
2022/05/25 Python