使用jQuery实现的掷色子游戏动画效果


Posted in Javascript onMarch 14, 2014

实现原理:当色子掷出后,通过jQuery的animate()函数改变色子位移,中间加入延时效果,并变换色子背景,最终动画运行到随机产生的点数时停止,并显示掷出的点数。其实就是动画过程加入多个不同图片的帧(同flash动画影片中的帧),帧数越多效果越好,然后逐帧运行后就形成了动画效果。
一、准备工作
我们需要准备色子素材,本示例中,我采用从网络上获取到的色子素材,我们要做处理的是将6个色子图片(1-6点),以及中间过渡效果的图片(做运动模糊处理)放在同一张图片上,保存为dice.png,用作色子背景图。
载入jQuery库,这是必须的。

<script type="text/javascript" src="js/jquery.js"></script>

然后在HTML页面的body中加入以下代码,其中#dice是用来放置色子的,#result是用来显示提示信息的。
<div id="dice" class="dice dice_1"></div> 
<p id="result">请直接点击上面的色子!</p>

二、CSS代码
我们使用background将图片dice.png载入到.dice中。然后我们分别用了几种样式通过不同的background-position值来定位不同的色子点数图和过渡效果图。其中的过渡效果图片我做了简单的模糊处理,大家也可以使用css3来处理图片的模糊效果。注意#dice_mask是用来做防重复点击的,后面会提到。
.wrap{width:90px; height:90px; margin:120px auto 30px auto; position:relative} 
.dice{width:90px; height:90px; background:url(dice.png) no-repeat;} 
.dice_1{background-position:-5px -4px} 
.dice_2{background-position:-5px -107px} 
.dice_3{background-position:-5px -212px} 
.dice_4{background-position:-5px -317px} 
.dice_5{background-position:-5px -427px} 
.dice_6{background-position:-5px -535px} 
.dice_t{background-position:-5px -651px} 
.dice_s{background-position:-5px -763px} 
.dice_e{background-position:-5px -876px} 
p#result{text-align:center; font-size:16px} 
p#result span{font-weight:bold; color:#f30; margin:6px} 
#dice_mask{width:90px; height:90px; background:#fff; opacity:0; position:absolute; 
 top:0; left:0; z-index:999}

三、jQuery代码
当单击色子时,先预置色子的样式(清空上次动画后的样式),将色子用透明的#dice_mask遮住防重复点击,并产生一个1-6的随机数,然后通过animate()函数,改变色子位移,改变色子的class使得出现过渡模糊背景图片,接着稍作延迟delay(),再接着进入下一个帧动画,最后动画结束时,色子的class样式定位到dice_x上,x表示点数,也就是得到了掷出色子后的点数,移除遮罩效果,又可以继续点击掷色子。
$(function(){ 
    var dice = $("#dice"); 
    dice.click(function(){ 
        dice.attr("class","dice");//清除上次动画后的点数 
        dice.css("cursor","default"); 
        $(".wrap").append("<div id='dice_mask'></div>");//加遮罩 
        var num = Math.floor(Math.random()*6+1);//产生随机数1-6 
        dice.animate({left: '+2px'}, 100,function(){ 
            dice.addClass("dice_t"); 
        }).delay(200).animate({top:'-2px'},100,function(){ 
            dice.removeClass("dice_t").addClass("dice_s"); 
        }).delay(200).animate({opacity: 'show'},600,function(){ 
            dice.removeClass("dice_s").addClass("dice_e"); 
        }).delay(100).animate({left:'-2px',top:'2px'},100,function(){ 
            dice.removeClass("dice_e").addClass("dice_"+num); 
            $("#result").html("您掷得点数是<span>"+num+"</span>"); 
            dice.css('cursor','pointer'); 
            $("#dice_mask").remove();//移除遮罩 
        }); 
    }); 
});

关于防止重复点击的办法很多,jQuery提供了one(),live(),bind(),on()等等这些函数在该实例中都行不通,所以我想了个办法,当点击色子后开始动画时,用一个和色子大小一样的透明遮罩层将色子遮住,使得在动画运行中不可连续重复点击色子,当动画运行完成后,再将遮罩层移除,这样色子就可以重新被点击了。
以上掷色子的动画效果就是模拟了flash的帧动画,通过时间轴来播放逐帧运行,而运用jQuery可以代替flash完成这样的动画效果,虽然效果没有flash的炫。本文的掷色子动画效果是为下期文章做铺垫,下期文章我将给大家介绍结合jQuery、HTML、CSS、PHP、MySQL的综合性技术文章及实例代码,讲解掷色子抽奖游戏,可以控制掷出色子点数的概率,也是一个趣味游戏。
Javascript 相关文章推荐
JS中style属性
Oct 11 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
Jun 27 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
Mar 16 Javascript
JQuery中使文本框获得焦点的方法实例分析
Feb 28 Javascript
js中跨域方法原理详解
Jul 19 Javascript
javascript实现超炫的向上滑行菜单实例
Aug 03 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
ES6中的数组扩展方法
Aug 26 Javascript
js实现常见的工具条效果
Mar 02 Javascript
node删除、复制文件或文件夹示例代码
Aug 13 Javascript
vue实现信息管理系统
May 30 Javascript
JS闭包原理及其使用场景解析
Dec 03 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
Mar 14 #Javascript
javascript将相对路径转绝对路径示例
Mar 14 #Javascript
Node.js和PHP根据ip获取地理位置的方法
Mar 14 #Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 #Javascript
javascript回车完美实现tab切换功能
Mar 13 #Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 #Javascript
JQuery中extend使用介绍
Mar 13 #Javascript
You might like
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
火车头采集器3.0采集图文教程
2007/03/17 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
js实现简易ATM功能
2020/10/27 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
详解python的super()的作用和原理
2020/10/29 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
飞利浦法国官网:Philips法国
2019/07/10 全球购物
艺术学院毕业生自我评价
2014/03/02 职场文书
校园元旦活动总结
2014/07/09 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
通知的写法
2015/04/23 职场文书
中秋节祝酒词
2015/08/12 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
Python 文字识别
2022/05/11 Python