小編給大家分享一下js+html5如何實(shí)現(xiàn)移動(dòng)端刮刮樂,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個(gè)人一直以來堅(jiān)持追求的企業(yè)文化。 創(chuàng)新互聯(lián)是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、軟件開發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺傳達(dá),提供有針對性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場,引領(lǐng)市場!
1、用HTML 5 canvas globalCompositeOperation 屬性實(shí)現(xiàn)刮刮樂
思路:
(1)首先需要一個(gè)盒子定位,確定刮刮樂區(qū)域想要放在哪里
(2)定位盒子里有個(gè)放內(nèi)容的盒子,也就是放獎(jiǎng)品的
(3)用一個(gè)畫布(canvas)把上面的盒子蓋住
(4)當(dāng)手觸摸移動(dòng)的時(shí)候,可以擦除部分畫布,露出獎(jiǎng)品區(qū)
(5)當(dāng)擦除足夠多(3/4)的時(shí)候,可以選擇讓畫布自動(dòng)消失,慢慢淡出(這個(gè)效果選做)
主要是第四步,如何擦除?
這里選用 globalCompositeOperation,即Canvas中的合成操作。簡單來說,Composite(組合),就是對你在繪圖中,后繪制的圖形與先繪制的圖形之間的組合顯示效果,比如在國畫中,你先畫一筆紅色,再來一筆綠色,相交的部分是一種混色,而在油畫中,綠色就會(huì)覆蓋掉相交部分的紅色,這在程序繪圖中的處理就是Composite,Canvas API中對應(yīng)的函數(shù)就是globalCompositeOperation。
globalCompositeOperation中有個(gè)屬性值是“destination-out",也就是當(dāng)繪畫重疊時(shí)顯示透明。剛好用到這里,我們就可以在畫布上亂畫,畫過的地方就是重疊的地方,就會(huì)變成透明,然后露出畫布下的東西,也就是我們想要的效果。
html 代碼如下:
恭喜發(fā)財(cái),紅包拿來
css代碼如下:
*{ margin: 0; padding: 0; } #main{ width: 100%; padding: 20px 0; background-color: red; } .canvasBox{ width: 78%; height: 160px; border-radius: 10px; background-color: #FFF; margin-left: 11%; line-height: 160px; text-align: center; position: relative; } #canvas{ width: 96%; height: 96%; position: absolute; left: 2%; top: 2%; background-color: transparent; }
第五步要用到canvas像素點(diǎn)的獲取(這塊注意,像素級操作,要在服務(wù)器環(huán)境下打開)
getImageData(int x,int y,int width,int height):該方法獲取canvas上從(x,y)點(diǎn)開始,寬為width、高為height的圖片區(qū)域的數(shù)據(jù),該方法返回的是一個(gè)CanvasPixelArray對象,該對象具有width、height、data等屬性。data屬性為一個(gè)數(shù)組,該數(shù)組每4個(gè)元素對應(yīng)一個(gè)像素點(diǎn)。
(對圖片的反相操作也可以這樣做,改變r(jià)gba值)
getImageData(int x,int y,int width,int height)返回的對象,data里面存儲的是像素點(diǎn)信息
我們再打印data,data屬性為一個(gè)數(shù)組,每4個(gè)元素對應(yīng)一個(gè)像素點(diǎn)(以rgba的形式保存每一個(gè)像素點(diǎn)的信息)。
所以我們就可以根據(jù)像素點(diǎn)的opcity值來判斷這個(gè)像素點(diǎn)是不是透明,是不是等于0?
透明的像素點(diǎn)數(shù)量/總像素點(diǎn)數(shù)量 = 擦除比例
js代碼:
document.addEventListener("touchend",function(){ /* 獲取imageData對象*/ var imageDate = ctx.getImageData(0,0,canvas.width,canvas.height); /* */ var allPX = imageDate.width * imageDate.height; var iNum = 0;//記錄刮開的像素點(diǎn)個(gè)數(shù) for(var i=0;i= allPX*3/4){ // disappear里面寫了緩慢清除的css3動(dòng)畫效果 canvas.setAttribute('class','disappear'); } },false)
" .disappear " 的css樣式,css3消失動(dòng)畫
.disappear{ -webkit-animation: disa 2s 1; animation: disa 2s 1; -webkit-animation-fill-mode: forwards; -moz-animation-fill-mode: forwards; -o-animation-fill-mode: forwards; animation-fill-mode: forwards; } @keyframes disa{ 0%{opacity:1;} 100%{opacity: 0;} }
以上是“js+html5如何實(shí)現(xiàn)移動(dòng)端刮刮樂”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!