js HTML5手機(jī)刮刮樂(lè)代碼
手機(jī)刮刮樂(lè)HTML5代碼, 使用原型prototype擴(kuò)展了一個(gè)clearArc 清除圓內(nèi)像素的功能, 此功能未完成扇形清除功能, 此外,在清除圓內(nèi)的像素時(shí),還有點(diǎn)瑕疵,右邊和下邊還不夠圓滑,有明顯的齒狀。如果你找到修復(fù)方法請(qǐng)一定要告訴我喲。不過(guò)此清除方法用于刮刮樂(lè)已經(jīng)完全滿足需求了。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>刮刮樂(lè)</title> <script type="text/javascript"> window.onload = function() { init(); } CanvasRenderingContext2D.prototype.clearArc=function(x,y,radius,startAngle, endAngle, counterclockwise){ var distance = function(x0,y0,x1,y1){ var dis = Math.sqrt(Math.pow(x0-x1,2)+Math.pow(y0-y1,2)); //return Math.ceil(dis*10000)/10000; return Math.round(dis*10000)/10000; }; //首先獲得矩形 var diameter = radius*2; var startX = x-radius; var cx = radius-(0-startX); startX = startX<0?0:startX; cx = cx-startX; var startY = y-radius; var cy = radius-(0-startY); startY = startY<0?0:startY; cy = cy-startY; var imgData = this.getImageData(startX,startY,diameter,diameter);//需要處理的矩形 for (var i=0;i<imgData.data.length;i+=4){ //矩陣內(nèi)的坐標(biāo) var ii = i/4; var ix = Math.floor(ii/imgData.width); var iy = ii%imgData.height; var dis = distance(ix,iy,cx,cy); if(dis<=radius){//此點(diǎn)在圓內(nèi) imgData.data[i+0]=0; imgData.data[i+1]=0; imgData.data[i+2]=0; imgData.data[i+3]=0; continue; } var dr = dis-radius; if(dr<Math.SQRT2){ var n = Math.sqrt(Math.pow(dr, 2)/2)*256;//新 var o = imgData.data[i+3]; imgData.data[i+3]=n<o?n:o; continue; } } this.putImageData(imgData,startX,startY); }; function init() { var imageWidth = 200; var imageHeight = 100; var gglc = document.getElementById("gglc"); var gglc2D = gglc.getContext("2d"); gglc2D.fillStyle = '#cccccc'; //設(shè)置覆蓋層的顏色 gglc2D.fillRect(1, 1, imageWidth, imageHeight); //設(shè)置覆蓋的區(qū)域 //gglc2D.clearArc(25,25,20); gglc.addEventListener("touchmove", function(event) { event.preventDefault(); for(var i in event.targetTouches){ var touch = event.targetTouches[i]; gglc2D.clearArc(touch.pageX,touch.pageY,20); } }, false); gglc.addEventListener("touchstart", function(event) { event.preventDefault(); for(var i in event.targetTouches){ var touch = event.targetTouches[i]; gglc2D.clearArc(touch.pageX,touch.pageY,20); } }, false); } </script> </head> <body> <div style="position: relative; width: 100%;height: 100%;"> <div style="position: absolute; width: 200px; height: 100px; text-align: center;line-height: 100px;border: 1px solid #ccc;'">謝謝惠顧</div> <canvas style="position: absolute;" id="gglc" width="201" height="101"></canvas> </div> </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
extjs簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了extjs簡(jiǎn)介,ExtJS為開(kāi)發(fā)者在開(kāi)發(fā)富客戶的B/S應(yīng)用中提供豐富的UI組件,具有統(tǒng)一的主題,便于快速開(kāi)發(fā),提高效率2017-07-07JavaScript實(shí)現(xiàn)九宮格移動(dòng)拼圖游戲
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)九宮格移動(dòng)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08JS實(shí)現(xiàn)的檢驗(yàn)身份證格式并輸出出生日期,年齡,性別,出生地示例
這篇文章主要介紹了JS實(shí)現(xiàn)的檢驗(yàn)身份證格式并輸出出生日期,年齡,性別,出生地,涉及javascript字符串遍歷、運(yùn)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05使用mixins實(shí)現(xiàn)elementUI表單全局驗(yàn)證的解決方法
這篇文章主要介紹了使用mixins實(shí)現(xiàn)elementUI表單的全局驗(yàn)證的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04knockoutjs模板實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)列表
這篇文章主要介紹了knockoutjs模板實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)列表的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-07-07JS獲取隨機(jī)數(shù)和時(shí)間轉(zhuǎn)換的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇JS獲取隨機(jī)數(shù)和時(shí)間轉(zhuǎn)換的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07快速解決layui彈窗按enter鍵不停彈窗的問(wèn)題
今天小編就為大家分享一篇快速解決layui彈窗按enter鍵不停彈窗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JS回調(diào)函數(shù) callback的理解與使用案例分析
這篇文章主要介紹了JS回調(diào)函數(shù) callback的理解與使用,結(jié)合具體案例形式分析了javascript回調(diào)函數(shù)的功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09JavaScript實(shí)現(xiàn)按Ctrl鍵打開(kāi)新頁(yè)面
這篇文章主要介紹了JavaScript實(shí)現(xiàn)按Ctrl鍵打開(kāi)新頁(yè)面的例子,本文方法適用HTML5環(huán)境中,需要的朋友可以參考下2014-09-09