使用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 相关文章推荐
[推荐]javascript 面向对象技术基础教程
Mar 03 Javascript
jQuery插件 tabBox实现代码
Feb 09 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
Jan 15 Javascript
一个可拖拽列宽表格实例演示
Nov 26 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
jquery获取select选中值的方法分析
Dec 22 Javascript
详解AngularJS中的http拦截
Feb 09 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
了解JavaScript中let语句
May 30 Javascript
OpenLayers实现图层切换控件
Sep 25 Javascript
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
May 30 Javascript
vue 自定义组件添加原生事件
Apr 21 Vue.js
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 异常处理实现代码
2009/03/10 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
浅谈php冒泡排序
2014/12/30 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
编写Js代码要注意的几条规则
2010/09/10 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python opencv读mp4视频的实例
2018/12/07 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
2014年班组工作总结
2014/11/20 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
2015年生活老师工作总结
2015/05/27 职场文书