使用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 相关文章推荐
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
js控制分页打印、打印分页示例
Feb 08 Javascript
js实现一个链接打开两个链接地址的方法
May 12 Javascript
jQuery绑定事件的几种实现方式
May 09 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
js实现短信发送倒计时功能(正则验证)
Feb 10 Javascript
Three.js如何实现雾化效果示例代码
Sep 27 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
Sep 13 Javascript
详解微信小程序与内嵌网页交互实现支付功能
Oct 22 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
Nov 22 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
整合了前面的PHP数据库连接类~~做成一个分页类!
2006/11/25 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
vue实现跳转接口push 转场动画示例
2019/11/01 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
python实现多人聊天室
2020/03/31 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
文员个人求职自荐信
2013/09/21 职场文书
大四毕业生学习总结的自我评价
2013/10/31 职场文书
教师自我鉴定范文
2014/03/20 职场文书
推荐信格式范文
2014/05/09 职场文书
数据保密承诺书
2014/06/03 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
Spring整合Mybatis的全过程
2021/06/28 Java/Android