精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用200行代碼寫一個H5小游戲

開發 前端
本文將帶大家一步步實現一個H5拼圖小游戲,考慮到H5游戲的輕量級和代碼體積,我沒有使用React或Vue這些框架,而采用我自己寫的dom庫和原生Javascript來實現業務功能。

前言

本文將帶大家一步步實現一個H5拼圖小游戲,考慮到H5游戲的輕量級和代碼體積,我沒有使用react或vue這些框架,而采用我自己寫的dom庫和原生javascript來實現業務功能,具體庫代碼可見我的文章如何用不到200行代碼寫一款屬于自己的js類庫,構建工具我采用了自己搭建的gulp4開發項目腳手架。你將學到:

  • 洗牌算法
  • 洗牌動畫實現原理
  • 用FileReader API實現本地預覽文件
  • 用Canvas生成海報

零零總總花了半天的時間,希望對自己后面涉及H5游戲有所幫助,也希望大家通過這篇文章有所收獲。

設計思路

效果演示

具體實現

接下來我將貼出每一步的核心代碼,供大家參考學習。

1、文件上傳解析

``` js
// 文件上傳解析
    var file = $('#file');
    file.on('change', function(e){
        var file = this.files[0];
        var fileReader = new FileReader();
        // 讀取完成觸發的事件
        fileReader.onload = function(e) {
            $('.file-wrap')[0].style.backgroundImage = 'url(' + fileReader.result + ')';
            imgSrc = fileReader.result;
        }


        file && fileReader.readAsDataURL(file);
    })
```

2、生成canvas海報

具體實現思路如下,canvas代碼后期會封裝成一個類,基本用法和思路大致如下:

function generateImg() {
        var canvas = document.createElement("canvas");        
        if(canvas.getContext) {
            var winW = window.innerWidth,
                winH = window.innerHeight,
            ctx = canvas.getContext('2d');
            canvas.width = winW;
            canvas.height = winH;
            // 繪制背景
            // ctx.fillStyle = '#06c';
            var linear = ctx.createLinearGradient(0, 0, 0, winH);
            linear.addColorStop(0, '#a1c4fd');
            linear.addColorStop(1, '#c2e9fb');
            ctx.fillStyle = linear;
            ctx.fillRect(0, 0, winW, winH);
            ctx.fill();
            // 繪制頂部圖像
            var imgH = 0;
            img = new Image();
            img.src = imgSrc;
            img.onload = function(){
                // 繪制的圖片寬為.7winW, 根據等比換算繪制的圖片高度為 .7winW*imgH/imgW
                imgH = .6*winW*this.height/this.width;
                ctx.drawImage(img, .2*winW, .1*winH, .6*winW, imgH);
                drawText();
                drawTip();
                drawCode();
            }
            // 繪制文字
            function drawText() {
                ctx.save();
                ctx.fillStyle = '#fff';
                ctx.font = 20 + 'px Helvetica';
                ctx.textBaseline = 'hanging';
                ctx.textAlign = 'center';
                ctx.fillText('我只用了' + (180 -dealtime) + 's,' + '快來挑戰!', winW/2, .15*winH + imgH);
                ctx.restore();
            }
            // 繪制提示文字
            function drawTip() {
                ctx.save();
                ctx.fillStyle = '#000';
                ctx.font = 14 + 'px Helvetica';
                ctx.textBaseline = 'hanging';
                ctx.textAlign = 'center';
                ctx.fillText('關注下方公眾號回復【拼拼樂】開始游戲', winW/2, .25*winH + imgH);
                ctx.restore();
            }
            // 繪制二維碼
            function drawCode() {
                var imgCode = new Image();
                imgCode.src = './images/logo.png';
                imgCode.onload = function(){
                    ctx.drawImage(imgCode, .35*winW, .3*winH + imgH, .3*winW, .3*winW);
    
                    // 生成預覽圖
                    var img = new Image();
                    img.src= convertCanvasToImage(canvas, 1).src;
                    img.className = 'previewImg';
                    img.onload = function(){
                        $('.preview-page')[0].appendChild(this);
                        startDx = startDx - 100;
                        transformX(wrap, startDx + 'vw');
                    }
                }
            }
                                 
        } else {
            alert('瀏覽器不支持canvas!')
        }
    }   
    // 將canvas轉化為圖片
    function convertCanvasToImage(canvas, quality) {
        var image = new Image();
        image.src = canvas.toDataURL("image/png", quality);
        return image;
    }

3、切換元素動畫和洗牌算法

我們用transform實現洗牌動畫和拼圖切換的動畫,洗牌算法主要通過維護一個矩陣序列來實現。接下來是基本的工具方法:

// 滑動元素,用于切換頁面
    function transformX(el, dx) {
        el.style.transform = 'translateX(' + dx + ')';
    }
    
// 生成n維矩陣
    function generateMatrix(n, dx, dy) {
        var arr = [], index = 0;
        for(var i = 0; i< n; i++) {
            for(var j=0; j< n; j++) {
                arr.push({x: j*dx, y: i*dy, index: index});
                index++;
            }
        }
        return arr
    }
    
// 數組置換
    function swap(arr, indexA, indexB) {
        var cache = arr[indexA];
        arr[indexA] = arr[indexB];
        arr[indexB] = cache;
    }
    
// 數組亂序
    function upsetArr(arr) {
        arr.sort(function(a,b){
            return Math.random() > 0.5 ? -1 : 1
        })
    }
    
// 洗牌方法
    function shuffle(els, arr) {
        upsetArr(arr);
        for(var i=0, len=els.length; i< len; i++) {
            var el = els[i];
            el.setAttribute('index', i);  // 將打亂后的數組索引緩存到元素中
            el.style.transform = 'translate(' + arr[i].x + 'vw,' + arr[i].y + 'vh'+ ')';
        }
    }
    
// 校驗是否成功方法
    function isTestSuccess(arr) {
        return arr.every(function(item, i){ return item.index === i })
    }
//

有了工具方法,我們可以通過如下調用實現洗牌:

//初始數組
let pool = generateMatrix(3, 28, 20);
// 洗牌 pieces是拼圖的dom集合
shuffle(pieces, pool);

該游戲的核心算法已經交給大家了。

源碼地址: https://gitee.com/lowcode-china/lianliankan。

責任編輯:姜華 來源: 趣談前端
相關推薦

2023-07-06 20:40:57

圣誕抽抽樂H5

2015-09-25 17:54:59

H5游戲

2021-03-30 05:58:01

JavascriptCss3轉盤小游戲

2022-03-29 07:40:23

H5游戲開發掃雷游戲

2021-08-15 22:52:30

前端H5拼圖

2022-03-24 08:33:58

小游戲項目cmdvue3

2022-03-24 07:57:58

Python水果忍者游戲

2020-11-30 06:20:13

javascript

2022-03-28 07:52:31

H5小游戲開發教程頁面基礎布局

2018-02-06 10:04:59

2018-03-22 13:58:06

Python換臉程序

2021-04-13 06:35:13

Elixir語言編程語言軟件開發

2015-08-14 10:42:05

2022-09-27 07:30:16

H5益智游戲引擎

2014-01-09 09:42:56

Python語言檢測器

2025-02-24 08:20:00

AI代碼生成

2019-06-05 15:00:28

Java代碼區塊鏈

2020-05-11 17:12:52

換臉Python圖像

2023-04-10 14:20:47

ChatGPTRESTAPI

2021-04-26 09:04:13

Python 代碼音樂
點贊
收藏

51CTO技術棧公眾號

中文字幕无人区二| 日本一区免费观看| www.av视频在线观看| 久久久久久毛片免费看 | gogogo免费视频观看亚洲一| 日本高清不卡在线| 国产a免费视频| 一区二区三区四区在线看| 欧美日韩你懂的| 日本久久久网站| 成人在线高清视频| 成人亚洲一区二区一| 日本不卡视频在线播放| 黑鬼狂亚洲人videos| 亚洲人成网www| 精品久久久久一区二区国产| 超碰影院在线观看| 91九色美女在线视频| 国产精品久久免费看| 久久精品第九区免费观看 | 国产在线视频卡一卡二| jlzzjlzz亚洲女人| 亚洲国产精品久久91精品| 高潮一区二区三区| www.日韩| 婷婷开心激情综合| 国产制服91一区二区三区制服| 黄色av免费在线看| 99久久99久久精品国产片果冻 | 欧美成人亚洲成人日韩成人| 最近中文字幕免费视频| 豆花视频一区二区| 日韩欧美综合一区| 911福利视频| 91另类视频| 日韩欧美亚洲国产一区| 久久久久久www| 亚洲h片在线看| 国产精品三级在线观看| 日本不卡一区| 精品视频二区| 久久久久国产一区二区三区四区 | 亚洲影视在线观看| gogogo免费高清日本写真| 2017亚洲天堂1024| 日本一区二区免费在线观看视频| 免费看污久久久| 邻家有女韩剧在线观看国语| 91免费国产在线观看| 国产高清自拍99| 亚洲av无码乱码国产精品久久| 激情综合五月婷婷| 国产精品视频公开费视频| 丰满人妻老熟妇伦人精品| 亚洲免费观看| 4444欧美成人kkkk| 日本在线播放视频| 先锋影音久久| 日韩av免费在线看| 999视频在线| 日本sm残虐另类| 国产精品一区电影| 国产精品国产三级国产aⅴ| 看国产成人h片视频| 成人激情视频在线播放| 91精品中文字幕| 国产剧情一区在线| 国产高清自拍一区| 天天综合永久入口| 色视频在线免费观看| 日本男人操女人| 性欧美xxxx视频在线观看| 亚洲观看高清完整版在线观看| 亚洲区一区二| 日韩三区免费| 国产sm主人调教女m视频| 日本wwwxx| 思思99re6国产在线播放| 欧美国产乱子伦| 中文字幕免费在线不卡| 欧美四级在线| 精品日韩美女的视频高清| 日韩av一二三四| 国产精品久久久久久久久久辛辛| 精品久久久久99| 公侵犯人妻一区二区三区| 日本大胆欧美| 久久久久久久久久久亚洲| 久久中文字幕免费| 国产一区二区三区黄视频| 国产伦理一区二区三区| 免费国产在线视频| 亚洲日本电影在线| 5月婷婷6月丁香| 亚洲欧美综合久久久久久v动漫| 欧美成va人片在线观看| 欧美三级视频网站| 国产精品av久久久久久麻豆网| 国产91在线高潮白浆在线观看| 国产精品视频久久久久久| av不卡免费在线观看| 亚洲福利av在线| 成人高潮aa毛片免费| 色美美综合视频| 国产又粗又猛又爽又黄| 国产精品亚洲人成在99www| 欧美成人剧情片在线观看| 天天操天天操天天操天天| 狠狠狠色丁香婷婷综合激情 | 91在线精品入口| av一二三不卡影片| 一级黄色录像免费看| 爱情电影社保片一区| 欧美mv日韩mv| 国产在线观看免费视频软件| 亚洲综合三区| 国产视频一区二区三区四区| 国产黄网站在线观看| 色综合天天综合色综合av | 在线观看欧美理论a影院| 欧美美最猛性xxxxxx| 中文字幕人妻丝袜乱一区三区| 成人黄色777网| 看全色黄大色大片| 精品九九久久| 在线观看国产精品91| 五月婷婷中文字幕| 成人不卡免费av| 肉大捧一出免费观看网站在线播放| japanese23hdxxxx日韩 | 中文字幕日本在线观看| 日韩欧美在线看| 欧美人与性动交α欧美精品| 一区二区三区免费播放| 亚洲美女网站18| 天天操天天操天天干| 亚洲男人的天堂av| 91精品在线看| 国产三级三级在线观看| 国产精品三级视频| 91色国产在线| 精品亚洲成人| 国产98色在线| 青青青手机在线视频观看| 午夜久久久久久| 美女露出粉嫩尿囗让男人桶| 午夜激情一区| 影音先锋在线一区| 国产一区日韩| 亚洲精品成人无限看| 精品视频亚洲| 天天躁日日躁狠狠躁欧美| 欧美一卡2卡3卡4卡| 视频一区二区三| 亚洲欧美激情网| a屁视频一区二区三区四区| 亚洲福利视频二区| 五月天av网站| 国产成人免费在线观看不卡| 永久免费网站视频在线观看| 欧美风情在线视频| 日韩网站免费观看| 精品国产青草久久久久96| 在线观看欧美日韩电影| 黄页在线观看免费| 一区二区三区蜜桃网| 日本亚洲一区二区三区| 韩国在线一区| 久久伦理网站| 日韩欧美少妇| 米奇精品一区二区三区在线观看| 亚洲第一页综合| av一区二区高清| 欧美日韩第一页| 少妇高潮一区二区三区69| 欧美性xxxxhd| 日本免费www| 国产乱国产乱300精品| 福利视频一二区| 精品久久网站| 亚洲精品免费一区二区三区| 99thz桃花论族在线播放| 国产小视频91| 精品人妻一区二区三区日产乱码| 天天综合色天天| 日本wwwxx| 日韩高清中文字幕一区| 8x8x华人在线| 九九综合在线| 99精品欧美一区二区三区| 老牛影视精品| 久久成人综合视频| 亚洲欧美日韩成人在线| 欧美高清dvd| 成人精品免费在线观看| 中文字幕一区二区三区不卡| 国产 中文 字幕 日韩 在线| 久久精品国产精品亚洲综合| 97成人在线免费视频| 四虎成人精品永久免费av九九| 国产高清精品一区二区| 国产精品麻豆成人av电影艾秋| 久久免费高清视频| 国产在线观看免费麻豆| 国产视频丨精品|在线观看| 国产喷水吹潮视频www| 91国偷自产一区二区三区观看 | 亚洲在线精品视频| 精品久久久久久久久久| 极品魔鬼身材女神啪啪精品| 国产亚洲精品aa| 亚洲香蕉中文网| 国产一区二区福利| 男女污污的视频| 国产日韩高清一区二区三区在线| 中文字幕日韩精品久久| 精品一区二区三区的国产在线观看| 国产精品免费观看高清| 国产一区二区三区| 国产精品都在这里| 台湾佬成人网| 欧美中文字幕在线| 黄视频在线免费看| 欧美精品一二区| 成人片黄网站色大片免费毛片| 香蕉视频亚洲一级| 欧美国产日本在线| mm1313亚洲国产精品美女| 日韩午夜在线视频| 亚洲图片88| 在线日韩欧美视频| 东凛在线观看| 亚洲天堂久久av| 免费在线黄色网址| 日韩精品在线免费观看| 免费国产羞羞网站视频| 日韩精品自拍偷拍| 国产成人精品亚洲精品色欲| 欧美久久一二区| 一级做a爰片久久毛片16| 精品视频资源站| 天天综合久久综合| 欧美亚洲国产一区在线观看网站| 黄色av网站免费观看| 欧美午夜精品伦理| 国产午夜麻豆影院在线观看| 福利二区91精品bt7086| 欧美高清自拍一区| 成人激情视频网| 高清无码视频直接看| 国产成年妇视频| 欧美日韩一区 二区 三区 久久精品| 亚洲免费黄色网址| 欧美性猛交xxxx免费看久久久| 日韩欧美三级在线观看| 激情av一区二区| 依依成人综合网| 一本大道久久a久久精二百| 国产suv精品一区二区33| 色综合天天天天做夜夜夜夜做| 日本久久综合网| 欧美日韩中文字幕一区二区| 97人人爽人人爽人人爽| 欧美一级黄色录像| 黄色www视频| 亚洲毛片一区二区| www黄在线观看| 久久天堂av综合合色| 视频在线这里都是精品| 午夜精品国产精品大乳美女| 成人性生活av| 国产精品永久在线| 中文一区二区三区四区| 国产v亚洲v天堂无码| 亚洲男人都懂第一日本| 日韩亚洲欧美高清| 欧美国产第二页| 欧美成人免费在线| 最近中文字幕无免费| 国产裸体永久免费无遮挡| 久久99精品国产麻豆不卡| 国产精品久久久久久久99| 粉嫩13p一区二区三区| 性欧美丰满熟妇xxxx性久久久| 极品尤物一区| 国产精品久久久久久久久影视| 欧美视频在线视频精品| 成人免费观看网站| 蜜桃一区二区三区| 成年人黄色在线观看| 亚洲精品九九| 中文字幕有码av| 丁香婷婷深情五月亚洲| 精品国产成人亚洲午夜福利| 亚洲日本va在线观看| 黑人精品无码一区二区三区AV| 337p亚洲精品色噜噜| 午夜视频在线免费播放| 久久深夜福利免费观看| 在线观看网站免费入口在线观看国内 | 亚洲欧美一区在线| 日韩中文字幕免费在线| 国产精品一区一区三区| 久久久久久久毛片| 午夜在线成人av| 国产精品久久影视| 亚洲欧美另类自拍| 国产亚av手机在线观看| 国产精品美女午夜av| 蜜桃久久久久| 国产一级大片免费看| 免费成人av在线| 日本xxx在线播放| 亚洲激情在线激情| 亚洲天堂男人网| 亚洲欧美在线x视频| 免费在线中文字幕| 成人h视频在线观看播放| 免费看av成人| 国产一区二区在线视频播放| 国产伦精品一区二区三区免费 | 亚洲精品国产一区二区三区四区在线| 国产免费av一区| 亚洲福利视频网| 日本性爱视频在线观看| 91九色国产视频| 欧美视频网址| 午夜dv内射一区二区| 26uuuu精品一区二区| 精品处破女学生| 欧美一区二区精品在线| 日本免费在线视频| 国产精品美女av| av伊人久久| 免费看黄色一级大片| 久久久午夜精品| 麻豆成人免费视频| 日韩欧美在线字幕| 久久伊人一区| 亚洲第一天堂网| 国产一区二区不卡在线| 国产欧美日韩免费| 美国一级黄色录像| 99久久久成人国产精品| 国产精品久久久久秋霞鲁丝| 极品尤物一区| 国产白丝袜美女久久久久| av一区二区久久| 精品成人av一区二区在线播放| 精品国产乱码久久| 日本aa在线| 九一国产精品| 中文字幕中文字幕一区三区| 青青草国产精品97视觉盛宴| 人妻精品久久久久中文| 欧美在线三级电影| 香蕉视频在线播放| 91欧美精品成人综合在线观看| 91久久电影| 国产伦精品一区二区三区妓女下载 | 成年人网站av| 一区二区三区四区在线播放| 性生活视频软件| 91高清视频免费观看| 久久爱www成人| 日本不卡一区二区在线观看| 最新欧美精品一区二区三区| a级片在线免费看| 97视频人免费观看| 欧美精美视频| 色天使在线观看| 亚洲午夜在线观看视频在线| 香蕉视频免费在线看| 国产成人免费av| 亚洲va在线| 800av在线播放| 91福利在线导航| 在线中文字幕电影| 精品一区久久| 久久精品国产久精国产| 伊人365影院| 一区二区三区日韩在线| 欧美欧美在线| 日本三级免费观看| 亚洲欧洲成人精品av97| 懂色av成人一区二区三区| 欧美在线视频网| 你懂的网址国产 欧美| av直播在线观看| 欧美一级免费大片| sese综合| 91.com在线| 国产精品天天看| 欧美在线精品一区二区三区| 国产精品91久久久久久| 欧美深夜福利| 久久日免费视频| 精品国产乱码91久久久久久网站| 中日韩脚交footjobhd| 最近免费观看高清韩国日本大全|