茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    Html5實現(xiàn)移動端、PC端 刮刮卡效果
    來源:易賢網(wǎng) 閱讀:1771 次 日期:2016-08-01 14:59:48
    溫馨提示:易賢網(wǎng)小編為您整理了“Html5實現(xiàn)移動端、PC端 刮刮卡效果”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了 Html5實現(xiàn)移動端、PC端 刮刮卡效果的相關(guān)資料,需要的朋友可以參考下

    刮刮卡需求:

    每一位用戶有三次刮刮卡的機會

    本次刮刮卡的結(jié)果會覆蓋上次的結(jié)果

    刮刮卡的中獎幾率呈現(xiàn)為遞增的曲線(保證三次中必須有一次中獎)

    刮出的結(jié)果包含按鈕既(領(lǐng)取獎品 or 再來一次 )

    分享活動獎品升級(這里主要是微信分享的回調(diào)了)

    我們自己的需求,今天就說怎么制作刮刮卡,有這樣需求的可以找我要源碼

    第一、body創(chuàng)建Canvas

    XML/HTML Code

    <div class="info" id="prize">  

         <span id="prompt"></span>  

         <span class="btn" id="ok">領(lǐng)取獎品</span>  

        <span class="btn" id="no">再來一次</span>  

     </div>  

     <canvas id="c1" class="canvas"></canvas>  

    這里我們首先創(chuàng)建了一個Canvas,并且在canvas底部加上了刮開后的效果。

    第二、 頁面加載后開始初始化畫布

    首先定義一些需要的變量

    XML/HTML Code

    var c1; //畫布   

     var ctx; //畫筆   

     var ismousedown; //標志用戶是否按下鼠標或開始觸摸   

     var isOk=0; //標志用戶是否已經(jīng)刮開了一半以上   

     var fontem = parseInt(window.getComputedStyle(document.documentElement, null)["font-size"]);//這是為了不同分辨率上配合@media自動調(diào)節(jié)刮的寬度  

    頁面加載后開始初始化畫布(這樣子就可以在頁面創(chuàng)建一個畫布了)

    XML/HTML Code

    window.onload = function(){    

        c1 = document.getElementById("c1");   

        //這里很關(guān)鍵,canvas自帶兩個屬性width、height,我理解為畫布的分辨率,跟style中的width、height意義不同。   

        //最好設(shè)置成跟畫布在頁面中的實際大小一樣   

        //不然canvas中的坐標跟鼠標的坐標無法匹配   

        c1c1.width=c1.clientWidth;   

        c1c1.height=c1.clientHeight;   

        ctx = c1.getContext("2d");   

        //PC端的處理   

        c1.addEventListener("mousemove",eventMove,false);   

        c1.addEventListener("mousedown",eventDown,false);   

        c1.addEventListener("mouseup",eventUp,false);   

        //移動端的處理   

        c1.addEventListener('touchstart', eventDown,false);   

        c1.addEventListener('touchend', eventUp,false);   

        c1.addEventListener('touchmove', eventMove,false);   

        //初始化   

        initCanvas();   

     }  

    第三、畫灰色的矩形鋪滿

    XML/HTML Code

    function initCanvas(){//網(wǎng)上的做法是給canvas設(shè)置一張背景圖片,我這里的做法是直接在canvas下面另外放了個div   

         //c1.style.backgroundImage="url(中獎圖片.jpg)";   

         ctx.globalCompositeOperation = "source-over";   

         ctx.fillStyle = '#aaaaaa';   

         ctx.fillRect(0,0,c1.clientWidth,c1.clientHeight);   

         ctx.fill();   

         ctx.font = "Bold 30px Arial";   

                     ctx.textAlign = "center";   

                     ctx.fillStyle = "#999999";   

                     ctx.fillText("刮一刮",c1.width/2,50);//把這個屬性設(shè)為這個就可以做出圓形橡皮擦的效果   

         //有些老的手機自帶瀏覽器不支持destination-out,下面的代碼中有修復(fù)的方法   

         ctx.globalCompositeOperation = 'destination-out';}  

    第四、鼠標按下 和 觸摸開始

    XML/HTML Code

    function eventDown(e){   

        e.preventDefault();   

        ismousedown=true;}  

    第五、鼠標抬起 和 觸摸結(jié)束

    XML/HTML Code

    function eventUp(e){   

        e.preventDefault();   

        //得到canvas的全部數(shù)據(jù)   

        var a = ctx.getImageData(0,0,c1.width,c1.height);   

        var j=0;   

        for(var i=3;i<a.data.length;i+=4){   

            if(a.data[i]==0)j++;   

        }   

        //當被刮開的區(qū)域等于一半時,則可以開始處理結(jié)果   

        if(j>=a.data.length/8){   

            isOk = 1;   

        }   

        ismousedown=false;   

     }  

    第六、鼠標移動 和 觸摸移動

    XML/HTML Code

    //鼠標移動 和 觸摸移動   

    function eventMove(e){   

        e.preventDefault();   

        if(ismousedown) {   

            if(e.changedTouches){   

                ee=e.changedTouches[e.changedTouches.length-1];   

            }   

            var topY = document.getElementById("top").offsetTop;   

            var oX = c1.offsetLeft,   

            oY = c1.offsetTop+topY;   

            var x = (e.clientX + document.body.scrollLeft || e.pageX) - oX || 0,   

            y = (e.clientY + document.body.scrollTop || e.pageY) - oY || 0;   

            //畫360度的弧線,就是一個圓,因為設(shè)置了ctx.globalCompositeOperation = 'destination-out';   

            //畫出來是透明的   

            ctx.beginPath();   

            ctx.arc(x, y, fontem*1.2, 0, Math.PI * 2,true);   

            //下面3行代碼是為了修復(fù)部分手機瀏覽器不支持destination-out   

            //我也不是很清楚這樣做的原理是什么   

            c1.style.display = 'none';   

            c1.offsetHeight;   

            c1.style.display = 'inherit';    

            ctx.fill();   

        }   

        if(isOk){   

            var btn = document.getElementsByClassName("btn");   

                for(var i=0; i<btn.length; i++){   

                    btn[i].style.zIndex = '3';   

                }   

                document.getElementsByClassName("btn")[0].style.zIndex="3";   

        }   

    }  

    第七: 如果沒有抽中再來一次

    很明顯,再來一次就是初始化所有的值,畫布重新加載,但是如果有次數(shù)限制的需求,務(wù)必在這里計算清楚。

    注:由于我們要求的比較多今天就不說怎么計算中獎概率的方法了。

    以上所述是小編給大家介紹的 Html5實現(xiàn)移動端、PC端 刮刮卡效果,希望對大家有所幫助

    更多信息請查看網(wǎng)頁制作
    易賢網(wǎng)手機網(wǎng)站地址:Html5實現(xiàn)移動端、PC端 刮刮卡效果
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇剩?/div>

    2026國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)