使用jQuery實現(xiàn)的擲色子游戲動畫效果
實現(xiàn)原理:當色子擲出后,通過jQuery的animate()函數(shù)改變色子位移,中間加入延時效果,并變換色子背景,最終動畫運行到隨機產(chǎn)生的點數(shù)時停止,并顯示擲出的點數(shù)。其實就是動畫過程加入多個不同圖片的幀(同flash動畫影片中的幀),幀數(shù)越多效果越好,然后逐幀運行后就形成了動畫效果。
一、準備工作
我們需要準備色子素材,本示例中,我采用從網(wǎng)絡(luò)上獲取到的色子素材,我們要做處理的是將6個色子圖片(1-6點),以及中間過渡效果的圖片(做運動模糊處理)放在同一張圖片上,保存為dice.png,用作色子背景圖。
載入jQuery庫,這是必須的。
然后在HTML頁面的body中加入以下代碼,其中#dice是用來放置色子的,#result是用來顯示提示信息的。
<p id="result">請直接點擊上面的色子!</p>
二、CSS代碼
我們使用background將圖片dice.png載入到.dice中。然后我們分別用了幾種樣式通過不同的background-position值來定位不同的色子點數(shù)圖和過渡效果圖。其中的過渡效果圖片我做了簡單的模糊處理,大家也可以使用css3來處理圖片的模糊效果。注意#dice_mask是用來做防重復(fù)點擊的,后面會提到。
.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代碼
當單擊色子時,先預(yù)置色子的樣式(清空上次動畫后的樣式),將色子用透明的#dice_mask遮住防重復(fù)點擊,并產(chǎn)生一個1-6的隨機數(shù),然后通過animate()函數(shù),改變色子位移,改變色子的class使得出現(xiàn)過渡模糊背景圖片,接著稍作延遲delay(),再接著進入下一個幀動畫,最后動畫結(jié)束時,色子的class樣式定位到dice_x上,x表示點數(shù),也就是得到了擲出色子后的點數(shù),移除遮罩效果,又可以繼續(xù)點擊擲色子。
var dice = $("#dice");
dice.click(function(){
dice.attr("class","dice");//清除上次動畫后的點數(shù)
dice.css("cursor","default");
$(".wrap").append("<div id='dice_mask'></div>");//加遮罩
var num = Math.floor(Math.random()*6+1);//產(chǎn)生隨機數(shù)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("您擲得點數(shù)是<span>"+num+"</span>");
dice.css('cursor','pointer');
$("#dice_mask").remove();//移除遮罩
});
});
});
關(guān)于防止重復(fù)點擊的辦法很多,jQuery提供了one(),live(),bind(),on()等等這些函數(shù)在該實例中都行不通,所以我想了個辦法,當點擊色子后開始動畫時,用一個和色子大小一樣的透明遮罩層將色子遮住,使得在動畫運行中不可連續(xù)重復(fù)點擊色子,當動畫運行完成后,再將遮罩層移除,這樣色子就可以重新被點擊了。
以上擲色子的動畫效果就是模擬了flash的幀動畫,通過時間軸來播放逐幀運行,而運用jQuery可以代替flash完成這樣的動畫效果,雖然效果沒有flash的炫。本文的擲色子動畫效果是為下期文章做鋪墊,下期文章我將給大家介紹結(jié)合jQuery、HTML、CSS、PHP、MySQL的綜合性技術(shù)文章及實例代碼,講解擲色子抽獎游戲,可以控制擲出色子點數(shù)的概率,也是一個趣味游戲。
相關(guān)文章
基于jquery實現(xiàn)頁面滾動到底自動加載數(shù)據(jù)的功能
這篇文章主要為大家詳細介紹了基于jquery實現(xiàn)頁面滾動到底自動加載數(shù)據(jù)的功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-12-12jQuery插件artDialog.js使用與關(guān)閉方法示例
這篇文章主要介紹了jQuery插件artDialog.js使用與關(guān)閉方法,結(jié)合具體實例形式分析了jQuery彈出窗口插件artDialog.js的簡單使用方法及相關(guān)注意事項,需要的朋友可以參考下2017-10-10jQuery實現(xiàn)動態(tài)顯示select下拉列表數(shù)據(jù)的方法
這篇文章主要介紹了jQuery實現(xiàn)動態(tài)顯示select下拉列表數(shù)據(jù)的方法,涉及jQuery針對json數(shù)據(jù)的讀取、遍歷及頁面元素屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-02-02