使用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实现的分页函数
Feb 07 Javascript
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 Javascript
JS随即打乱数组实现代码
Dec 03 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
vue-router 学习快速入门
Mar 01 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
Feb 08 Javascript
Node.js 使用AngularJS的方法示例
May 11 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
JavaScript常见继承模式实例小结
Jan 11 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 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
一个改进的UBB类
2006/10/09 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
PHP6新特性分析
2016/03/03 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
Python类的用法实例浅析
2015/05/27 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
Python 使用office365邮箱的示例
2020/10/29 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
大专应届生个人简历的自我评价
2013/10/15 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
高中生家长寄语大全
2014/04/03 职场文书
鉴定评语大全
2014/05/05 职场文书
敬老模范事迹
2014/05/21 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
2014年党总支工作总结
2014/12/18 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
岗位聘任报告
2015/03/02 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android