微信小程式canvas實現刮刮樂效果

2022-09-28 21:15:19 字數 1832 閱讀 8075

效果圖

設計流程

設計思路

1、全域性常量

獲取使用者傳入的canvas的id,設定的canvas的寬高,canvas塗層的顏色,清除當前座標的半徑和直徑,計算當前清除的面積,全部清除百分比,canvas的面積。

constructor(page,opts);

this.page = page;

程式設計客棧 www.cppcns.comthis.canvasid = opts.canvasid || 'luck';

this.width = opts.width || 300;

this.height = opts.height || 150;

this.maskcolor = opts.maskcolor || '#dddddd';

this.size = opts.size || 8;

this.r = this.size * 2;

this.area = this.r * this.r;

this.scale = opts.scale || 0.75;

this.totalarea = this.width * this.height;

this.init();

}2、初始化全域性變數

1、變數:判斷清除全部塗層的布林值,記錄清除座標的陣列。

2、api:呼叫建立canvas繪圖上下文api。

3、方法:呼叫塗層繪製函式,呼叫事件繫結函式。

init()

3、塗層繪製函式的實現

drawmask程式設計客棧()

4、事件繫結函式的實現

1 、touchstart事件只是清除當前位置的座標點半徑的塗層。

2 、touchmove事件清除移動過程個座標點半徑內的塗層。

3 、touchend事件判斷當前次清除是否超過總面積的75%,超過則全部清除,否則不做處理。

bindtouch()

_this.page.ontouchmove = function (e)

_this.page.ontouchend = function (e)

}}5、eraser橡皮擦函式的實現

1、獲取記錄清除座標點陣列的長度,當前位置的x,y座標,計算清除塊的起點,宣告計數變數。

2、判斷是否是第一次進入,是則直接記錄該座標。

3、判斷當前點在記錄陣列中是否存在,如果存在,直接返回,如果不存在,在記錄入陣列。

4、是否滿足清除全部塗層,滿足show賦值為true,不滿足,直接清除當前座標塗層。

eraser(e,bool))

} for (let val of this.clearpoints)else

} if(len === count))

} if (this.clearpoints.length && this.r * this.r * this.clearpoints.length > this.scale * this.totalarea)

this.ctx.clearre y1, this.r, this.r);

this.ctx.draw(true);

}提供的其他實現思路

方法一:本文提供的方法是將中獎作為背景設定給canvas,然後清除canvas塗層來實現刮刮樂效果。

方法二:canvas繪製塗層,然後取在canvas相同座標的畫素,最後將該處畫素繪製到canvas。

方法三:類似方法一,只是將背景直接用img.定位在canvas的下邊。

總結最重要的是判斷清除塗層在總canvas面積的占有率記錄,只要判斷該座標不在清除的範圍,就可以記錄該座標。

本文標題: 微信小程式canvas實現刮刮樂效果

本文位址:

微信小程式 canvas實現刮刮樂效果

canvas設定背景圖,作為中獎 在canvas上繪製刮的灰色塗層 通過繫結的事件,清除對應區域的塗層 最後判斷塗層清除區域是否超過設定的可見百分比,如果超過則全部塗層清除,否則不清楚。獲取使用者傳入的canvas的id,設定的canvas的寬高,canvas塗層的顏色,清除當前座標的半徑和直徑,計...

微信小程式 canvas實現刮刮樂效果

canvas設定背景圖,作為中獎 在canvas上繪製刮的灰色塗層 通過繫結的事件,清除對應區域的塗層 最後判斷塗層清除區域是否超過設定的可見百分比,如果超過則全部塗層清除,否則不清楚。獲取使用者傳入的canvas的id,設定的canvas的寬高,canvas塗層的顏色,清除當前座標的半徑和直徑,計...

刮刮樂canvas實現

class scratch config this.movenum 0 this.clearrange clearrange 2 this.canvasid canvasid this.radius radius 25 this.canvas this.canvasid this.ifend fal...