精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久国产亚洲精品无码| 亚洲v日韩v综合v精品v| 熟女高潮一区二区三区| 日本久久二区| 一区二区三区四区不卡在线| 国产伦精品一区二区三区高清| 啦啦啦免费高清视频在线观看| 国产一区毛片| 日韩欧美一区二区视频| 国产黄页在线观看| 日本不卡三区| 99久久99久久免费精品蜜臀| 国产精品日韩一区| 久久亚洲av午夜福利精品一区| 亚洲欧美tv| 日韩片之四级片| avav在线看| 91黄色在线| 国产日韩精品一区二区浪潮av| 99国产盗摄| 中文字幕在线观看你懂的| 欧美日韩亚洲一区二区三区在线| 国产性色av一区二区| 国产成人精品综合久久久久99| 欧美1级2级| 亚洲一区精品在线| 水蜜桃亚洲一二三四在线| 亚洲欧美另类一区| 老汉av免费一区二区三区 | 亚洲欧美自偷自拍| 国产综合久久久久久久久久久久| 清纯唯美亚洲激情| 久久在线视频精品| 久久国产综合| 亚洲欧美在线免费观看| 岛国av免费观看| 懂色av色香蕉一区二区蜜桃| 在线观看区一区二| av免费观看网| gogo高清午夜人体在线| 亚洲人成人一区二区在线观看| 欧美黄色直播| 五月婷婷六月丁香综合| 国产一区999| 国产在线观看精品| 国产在线一级片| 美女精品网站| 欧美一二三视频| 国产精品99精品| 欧美亚洲不卡| 欧美大片免费看| 国产第一页浮力| 91综合网人人| 日韩视频在线免费观看| 亚洲午夜福利在线观看| 日本一区福利在线| 亚洲国产成人精品久久| 成人啪啪18免费游戏链接| 国产日韩欧美中文在线| 欧美美女一区二区| www.夜夜爽| 免费成人毛片| 337p亚洲精品色噜噜狠狠| 亚洲免费黄色网| 91成人精品观看| 欧美精品 日韩| 五月天婷婷在线观看视频| 亚洲aⅴ网站| 欧美一区二区三区人| 中文字幕 欧美 日韩| avtt综合网| 亚洲精品wwwww| 巨胸大乳www视频免费观看| 蜜桃a∨噜噜一区二区三区| 亚洲欧美日韩精品久久亚洲区 | 成人午夜网址| 亚洲高清在线观看| 成人片黄网站色大片免费毛片| 精品美女在线视频| 久久精品国产综合| 精品午夜福利在线观看| 国产精品日韩| 国产精品久久久久久av下载红粉 | 久久精品男女| 国产精品高清网站| 亚洲字幕av一区二区三区四区| 国产美女主播视频一区| 国产精品久久久久久久久婷婷| 日本久久一级片| 久久久国产精华| 在线视频不卡一区二区| av电影院在线看| 色综合久久久久综合体| 亚洲美女爱爱视频| 都市激情亚洲| 亚洲人成电影在线观看天堂色| 日本在线观看网址| 欧美三区视频| 国产精品wwww| 午夜久久久久久久久久| 久久女同互慰一区二区三区| 日本黄色播放器| 国产不卡123| 欧美剧情片在线观看| 亚洲国产精品第一页| 国产欧美日韩精品一区二区三区| 超在线视频97| 中文字幕超碰在线| 国产一区二区久久| 欧美在线播放一区| 91在线中文| 欧洲av一区二区嗯嗯嗯啊| 亚洲精品一二三四| 国产精品亚洲片在线播放| 欧美成年人视频| 日韩欧美国产另类| 成人妖精视频yjsp地址| 亚洲在线不卡| 欧美成a人片在线观看久| 日韩一区二区三| av电影网站在线观看| 狠狠爱成人网| 91人成网站www| 国产69久久| 婷婷丁香久久五月婷婷| aaaaaaaa毛片| 日韩激情免费| 日本成人免费在线| 国产91绿帽单男绿奴| 国产精品久久免费看| 日本久久久精品视频| 一区二区中文字幕在线观看| 日韩亚洲一区二区| 夜夜躁日日躁狠狠久久av| 91视频免费播放| 国产一区二区三区小说| 久久的色偷偷| 久久视频免费观看| 日韩乱码一区二区三区| 久久久精品综合| 国产男女无遮挡| 欧美大奶一区二区| 久久久免费精品| 亚洲欧美另类综合| 亚洲综合激情小说| 欧美xxxx日本和非洲| 欧美片第1页综合| 亚洲永久免费观看| 91在线中文| 日韩亚洲电影在线| 在线免费日韩av| 国内精品不卡在线| 日本一本草久p| 精品伊人久久| 色综合视频网站| www.亚洲黄色| 亚洲国产你懂的| 波多野结衣视频播放| 日韩午夜在线电影| 久久国产一区二区| www.com.cn成人| 亚洲欧美日韩中文在线制服| 少妇高潮av久久久久久| 久久久久久99久久久精品网站| 欧美又粗又长又爽做受| 麻豆一区二区| 国产国语刺激对白av不卡| 欧美色18zzzzxxxxx| 在线视频欧美精品| 国产精品视频看看| 国产精品一二三在| 青青草精品视频在线| 少妇精品导航| 国产精品成久久久久三级| 波多野结衣一区二区| 欧美人体做爰大胆视频| 波多野结衣不卡视频| 成人性生交大合| 欧美一区二区三区爽大粗免费| 一本色道久久综合亚洲精品酒店| 国产精品美女www| av在线免费观看网址| 精品国产99国产精品| 九九热在线免费观看| 国产精品午夜春色av| 中文字幕av一区二区三区人妻少妇 | 羞羞在线观看视频| 国产精品影音先锋| 国模无码视频一区二区三区| 欧美亚洲国产激情| 91精品网站| 第84页国产精品| 日韩在线观看成人| 人妻va精品va欧美va| 色88888久久久久久影院野外| 少妇高潮一区二区三区喷水| 成人免费视频caoporn| 熟妇人妻无乱码中文字幕真矢织江| 国产精品88久久久久久| 国产精品久久精品国产| 偷拍视频一区二区三区| 精品中文字幕乱| 国产黄色免费在线观看| 欧美成人一级视频| 做爰无遮挡三级| 偷拍日韩校园综合在线| 亚洲欧美综合7777色婷婷| 成人av网址在线| 中文字幕22页| 香蕉久久夜色精品| 国产91在线亚洲| 日韩在线中文| 蜜桃久久精品乱码一区二区| 久久九九精品视频| 国产精品久久久久久av下载红粉| 欧美激情成人动漫| 日日骚久久av| 久久国产精品高清一区二区三区| 日韩欧美国产一二三区| 日本欧美www| 欧美性20hd另类| 久草免费新视频| 国产精品成人免费| 欧美大波大乳巨大乳| 成人av免费在线观看| 亚洲制服在线观看| 免费xxxx性欧美18vr| 丝袜老师办公室里做好紧好爽| 欧美日韩亚洲一区| 中文字幕色呦呦| 欧美va久久久噜噜噜久久| 欧美日韩一区在线观看视频| 国产精品白丝一区二区三区| 亚洲一区久久久| 成人噜噜噜噜| 91精品国产综合久久久久久久久 | 日韩欧美国产视频| 日本三级免费看| 洋洋成人永久网站入口| 真实国产乱子伦对白在线| 国产精品伦一区| 国产免费无遮挡吸奶头视频| 久久午夜老司机| aaaaa级少妇高潮大片免费看| 成人国产精品视频| 丰满熟女人妻一区二区三区| 国产成人av一区二区三区在线观看| 亚洲精品手机在线观看| 美女诱惑一区二区| 五月婷婷六月丁香激情| 免费不卡在线视频| 老司机午夜性大片| 国产一区二区三区免费看| 中文字幕日韩综合| 国产激情一区二区三区桃花岛亚洲| 日本熟妇人妻中出| 另类人妖一区二区av| 五月天激情播播| 国产精品一品二品| 中文字幕无人区二| 99国产精品国产精品久久| 精品夜夜澡人妻无码av| 久久精品在线免费观看| 久久精品三级视频| 国产精品福利一区二区三区| 国产精品久久久精品四季影院| 一区2区3区在线看| 黄网在线观看视频| 91久久人澡人人添人人爽欧美| 中文字幕在线视频免费| 欧美一区二区三区在线观看 | 国产激情91久久精品导航| 中文字幕欧美视频| 成人免费观看男女羞羞视频| 一起草在线视频| 久久亚洲精华国产精华液| 超碰97av在线| 亚洲精品网站在线观看| 国产一级特黄aaa大片| 日韩欧美一区视频| 在线视频播放大全| 日韩欧美视频一区| 色视频在线观看福利| 丝袜情趣国产精品| 牛牛精品在线| 国产99久久精品一区二区 夜夜躁日日躁 | 国产欧美日韩成人| 亚洲精品乱码久久久久久按摩观| 你懂的视频在线播放| 久久精品视频网站| 国产高潮在线| 国产玖玖精品视频| aiai久久| 一级做a爰片久久| 亚洲茄子视频| 亚洲 国产 图片| www.欧美亚洲| 波兰性xxxxx极品hd| 亚洲成人av一区二区三区| 天堂免费在线视频| 亚洲成人网久久久| 欧美成年黄网站色视频| 91av成人在线| a一区二区三区亚洲| 明星裸体视频一区二区| 亚洲天天综合| av视屏在线播放| 国产成人欧美日韩在线电影| 69精品无码成人久久久久久| 亚洲一区二区在线观看视频| 中文有码在线播放| 亚洲国产欧美自拍| 50度灰在线| 国产免费亚洲高清| 亚洲精品动态| 日韩黄色短视频| 国产一区二区网址| 99久久精品免费视频| 偷拍日韩校园综合在线| 99久久精品无免国产免费| 亚洲一级一级97网| 深夜福利视频一区二区| 成人免费视频网站入口| 91精品福利| 最新天堂中文在线| 久久久久久久综合日本| 四虎成人精品永久免费av| 91精品国产综合久久精品app| 国产精品一二三区视频| 2019中文字幕免费视频| 中文字幕av一区二区三区四区| 老司机av福利| 久久电影网电视剧免费观看| 天天躁夜夜躁狠狠是什么心态| 精品久久久久久久中文字幕| 蜜臀久久久久久999| 欧美日韩国产二区| 欧美另类中文字幕| 免费成人进口网站| 久久99精品久久久久久国产越南 | 亚洲精品伦理在线| 91在线你懂的| 中文字幕久热精品视频在线| 亚洲成人激情社区| 日韩欧美一区二区三区四区| 香蕉成人久久| 免费观看a级片| 色哟哟一区二区在线观看| 欧美zzoo| 日韩免费在线视频| jiujiure精品视频播放| av污在线观看| 国产精品久久久久久久岛一牛影视| 伊人网中文字幕| 久久影院资源网| 免费一区二区三区在线视频| 日韩欧美一级在线| 国产福利一区在线| 久久9999久久免费精品国产| 亚洲黄色有码视频| 少妇视频一区| 水蜜桃亚洲精品| 国产综合色在线| 精品无码久久久久久久| 日韩电影免费在线观看中文字幕| 亚洲天堂av影院| 视频一区视频二区视频三区视频四区国产| 日韩高清在线电影| 国产精品久久久免费看| 日韩女优毛片在线| av资源一区| 欧美在线播放一区| 国产一区二三区好的| 国产精品30p| 亚洲欧洲在线视频| 四虎在线精品| 成人在线国产视频| 久久色.com| 国产偷拍一区二区| 7777kkkk成人观看| 欧美日韩一二| 懂色一区二区三区av片| 超碰97国产精品人人cao| 亚洲国产一区自拍| 蜜桃成人精品| 色乱码一区二区三区熟女| 国产成人午夜高潮毛片| 日本三级一区二区| 中文字幕欧美精品在线| 日韩精品一区国产| 国产性xxxx18免费观看视频| 国产精品国产三级国产aⅴ入口| 亚洲美女福利视频| 国产a∨精品一区二区三区不卡| 久久网站免费观看| 国产精品伦子伦| 51精品视频一区二区三区| 蜜桃在线视频| 在线观看18视频网站| 91色.com|