代碼地址javascript
這個組件是我寫過的關於移動端h5活動轉盤抽獎的頁面,當時寫完以後肯定挺好看、挺炫的,因此就把它單獨出來了,之後再寫相似的頁面,能夠參考其中的一些實現原理!css
//獲取一個介於某兩個數之間的
function getRandomNumber(min,max){
return Math.floor(Math.random() * (max - min)) + min;
};複製代碼
在實現轉盤的時候,用到了兩個隨機數,一個較小,一個較大,主要用來分別控制指針和獎品轉盤以不一樣的速度旋轉,用以給用戶實現視差!html
轉盤旋轉以前,用不一樣的初始角度表明不一樣的不一樣的獎品,那麼最後轉盤要轉的角度就是:隨機數n 360。好比「xx獎品」的默認角度相對於轉盤是45度,抽獎的時候,獲得的隨機數是2,那麼轉盤就應該轉2 360 + 45 = 765度。這樣就能把每次轉盤所轉的角度跟產品對應起來了!java
動畫實現方面主要用到了setTimeout和window.requestAnimationFrame,可是主要在用setTimeout的時候,爲了防止動畫的抖動,應該保證1s中繪製60幀頁面,也就是說,轉盤要轉3圈,用時3秒的話,那麼每調一次setTimeout方法,轉盤所轉的角度就是:git
var perAngle = 3 * 360 / 3 * 60;//6°複製代碼
一、圖片加載慢的問題,咱們能夠採用一種最原始、最笨、最省錢的方法(其它方法可使用cdn等等,這裏不介紹)——預加載解決,方法就是在進入本頁面以前,在同一個服務器的其它頁面把對應的圖片加載一遍,這樣當進入到當前的頁面,須要加載的圖片已經在緩存中了,因此此時再加載這些圖片就會快從緩存中直接拿圖片,速度就會槓槓的!如(須要在b頁面圖片1,咱們能夠在a頁面中先加載一次,記住,a頁面和b頁面在同一個服務器下):github
<!--a頁面-->
<div>
<img src="圖片1" />
</div>
<!--b頁面-->
<!--此時加載圖片固然就是從緩存中拿到的圖片-->
<div>
<img src="圖片1" />
</div>複製代碼
二、閃爍燈卡頓的,問題,能夠調節響應圖片的動畫的更新頻率解決ajax
var isRequesting = false;
function getData(){
//若是當前用戶正在進行抽獎,那麼就返回
if(isRequesting)return false;
isRequesting = true;
//顯示遮罩層
$("._mask").css('display','block');
//其他代碼省略
$.ajax({
url:server_api_address,
type:'GET',
success : function(data){
isRequesting = false;
//其他代碼省略
//當前轉盤動畫完成以後
//再隱藏遮罩層
animationComplate(function(){
$("._mask").css('display','none');
});
},
error:function(data){
//代碼省略
}
});
};複製代碼
目前來看,我以爲惟一有點欠缺的地方就是:轉盤和指針的旋轉速度老是勻速的,很難帶給用戶那種驚心動魄、期待的真實抽獎的感受。因此轉盤的速度算法方面應該作一些改進!讓抽獎更接近真實感受!算法
固然其它一些地方問題,這裏就不注重談了,由於涉及到具體的先後臺對接問題!api