基于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 相关文章推荐
聊天室php&amp;mysql(三)
Oct 09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
CodeIgniter php mvc框架 中国网站
May 26 PHP
PHP 数组实例说明
Aug 18 PHP
drupal 代码实现URL重写
May 04 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
php猴子选大王问题解决方法
May 12 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
smarty中常用方法实例总结
Aug 07 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
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
javascript常用对话框小集
2013/09/13 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
浅析Ajax语法
2016/12/05 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
浅谈python多线程和队列管理shell程序
2015/08/04 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
Python实现按中文排序的方法示例
2018/04/25 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
实习单位接收函
2014/01/11 职场文书
合伙协议书
2014/04/23 职场文书
工地安全质量标语
2014/06/07 职场文书
房产分割协议书范文
2014/11/21 职场文书
2019旅游导游工作总结
2019/06/27 职场文书