天天看點

别踩白塊 (原生js版的别踩白塊)

分階段提取代碼是為了讓讀者更加簡單明了的明白别踩白塊的代碼  第一階段寫出靜态頁面(搭建架構)

<!DOCTYPE html>

<html >

<head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style>

        #cont{

            position: relative;

            border: 1px solid red;

            width: 400px;

            overflow: hidden;

        }

        #main{

            position: relative;

        }

        .row{

            width: 400px;

            height: 100px;

        }

        .row div{

            width: 98px;

            height: 98px;

            border: 1px solid gray;

            float: left;

        }

        .black{

            background: black;

        }

    </style>

</head>

<body>

    <div id="cont">

        <div id="main">

            <div class="row">

                <div></div>

                <div class="black"></div>

                <div></div>

                <div></div>

            </div>

            <div class="row">

                <div></div>

                <div class="black"></div>

                <div></div>

                <div></div>

            </div>

            <div class="row">

                <div class="black"></div>

                <div></div>

                <div></div>

                <div></div>

            </div>

            <div class="row">

                <div></div>

                <div></div>

                <div class="black"></div>

                <div></div>

            </div>

        </div>

    </div>

</body>

<script>

</script>

</html>

二階段删除靜态的快,因為别踩白塊的那些都是自己建立的(動态建立div)

<!DOCTYPE html>

<html >

<head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style>

        #cont{

            position: relative;

            border: 1px solid red;

            width: 400px;

            overflow: hidden;

        }

        #main{

            position: relative;

        }

        .row{

            width: 400px;

            height: 100px;

        }

        .row div{

            width: 98px;

            height: 98px;

            border: 1px solid gray;

            float: left;

        }

        .black{

            background: black;

        }

    </style>

</head>

<body>

    <div id="cont">

        <div id="main"></div>

    </div>

</body>

<script>

    var main = document.getElementById('main');

    function cdiv(className){

        // 建立DIV

        var div = document.createElement('div');

        if(className){ // 判斷有沒有傳遞class值

            // 如果有值,為div添加class屬性

            div.setAttribute('class',className);

        }

        //傳回建立好的div

        return div;

    }

    // 建立一行div

    function crow(){

        // 建立一行div  class="row"

        var row = cdiv('row');

        // 擷取随機數

        var index = Math.floor(Math.random()*4);

        for(var i=0;i<4;i++){ 

            //循環四次建立小div 

            if(i==index){ //如果本次循環數和随機數相等,此div為黑色

                row.appendChild(cdiv('black'));

            }else{

                //如果本次循環數和随機數不相等,此div為白色

                row.appendChild(cdiv());

            }

        }

        // 将本行div 添加到main

        main.appendChild(row);

    }

    function init(){

        // 循環四次,稱為四行

        for(var i=0;i<4;i++){

            crow();

        }

    }

    // 初始化調用

    init();

</script>

</html>

第三步 讓白塊動起來   div塊循環出現

<!DOCTYPE html>

<html >

<head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style>

        #cont{

            position: relative;

            border: 1px solid red;

            width: 400px;

            overflow: hidden;

        }

        #main{

            position: relative;

            top:-100px;

        }

        .row{

            width: 400px;

            height: 100px;

        }

        .row div{

            width: 98px;

            height: 98px;

            border: 1px solid gray;

            float: left;

        }

        .black{

            background: black;

        }

    </style>

</head>

<body>

    <div id="cont">

        <div id="main"></div>

    </div>

</body>

<script>

    var main = document.getElementById('main');

    function cdiv(className){

        // 建立DIV

        var div = document.createElement('div');

        if(className){ // 判斷有沒有傳遞class值

            // 如果有值,為div添加class屬性

            div.setAttribute('class',className);

        }

        //傳回建立好的div

        return div;

    }

    // 建立一行div

    function crow(){

        // 建立一行div  class="row"

        var row = cdiv('row');

        // 擷取随機數

        var index = Math.floor(Math.random()*4);

        for(var i=0;i<4;i++){ 

            //循環四次建立小div 

            if(i==index){ //如果本次循環數和随機數相等,此div為黑色

                row.appendChild(cdiv('black'));

            }else{

                //如果本次循環數和随機數不相等,此div為白色

                row.appendChild(cdiv());

            }

        }

        // 将本行div 添加到main

        main.insertBefore(row,main.firstChild);

        // main.appendChild(row);

    }

    function move(){

        // 擷取main 的top值,

        var top = parseInt(getComputedStyle(main).top);

        top += 2;

        // 每調用一次,top在原基礎上+2

        main.style.top = top+'px'; //将top新值重新賦回樣式表

        if(top == 0){ //top值為0時,證明最頂層的一行div出現完畢

            crow(); //建立新的一行

            main.style.top = '-100px';// 将top 置為-100,隐藏新的頂層一行

            if(main.children.length>5){  //當大于5行時

                //删除最後一行 

                main.removeChild(main.lastChild);

            }

        }

    }

    function init(){

        // 循環四次,稱為四行

        for(var i=0;i<4;i++){

            crow();

        }

        // 每隔一段時間就調用move函數

        setInterval(move,40);

    }

    // 初始化調用

    init();

</script>

</html>

第四步 加分 判斷輸赢   加速

<!DOCTYPE html>

<html >

<head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style>

        #cont{

            position: relative;

            border: 1px solid red;

            width: 400px;

            overflow: hidden;

        }

        #main{

            position: relative;

            top:-100px;

        }

        .row{

            width: 400px;

            height: 100px;

        }

        .row div{

            width: 98px;

            height: 98px;

            border: 1px solid gray;

            float: left;

        }

        .black{

            background: black;

        }

    </style>

</head>

<body>

    <h2 id="sc">0</h2>

    <div id="cont">

        <div id="main"></div>

    </div>

</body>

<script>

    var main = document.getElementById('main');

    function cdiv(className){

        // 建立DIV

        var div = document.createElement('div');

        if(className){ // 判斷有沒有傳遞class值

            // 如果有值,為div添加class屬性

            div.setAttribute('class',className);

        }

        //傳回建立好的div

        return div;

    }

    // 建立一行div

    function crow(){

        // 建立一行div  class="row"

        var row = cdiv('row');

        // 擷取随機數

        var index = Math.floor(Math.random()*4);

        for(var i=0;i<4;i++){ 

            //循環四次建立小div 

            if(i==index){ //如果本次循環數和随機數相等,此div為黑色

                row.appendChild(cdiv('black'));

            }else{

                //如果本次循環數和随機數不相等,此div為白色

                row.appendChild(cdiv());

            }

        }

        // 将本行div 添加到main

        main.insertBefore(row,main.firstChild);

        // main.appendChild(row);

    }

    var x = 2;

    function move(){

        // 擷取main 的top值,

        var top = parseInt(getComputedStyle(main).top);

        top += x;

        // 每調用一次,top在原基礎上+2

        main.style.top = top+'px'; //将top新值重新賦回樣式表

        if(top > 0){ //top值為0時,證明最頂層的一行div出現完畢

            crow(); //建立新的一行

            main.style.top = '-100px';// 将top 置為-100,隐藏新的頂層一行

            if(main.lastChild.p == undefined){

                clearInterval(c);

                sta = false;

                alert('game over!!!');

            }

            if(main.children.length>5){  //當大于5行時

                //删除最後一行 

                main.removeChild(main.lastChild);

            }

        }

    }

var sta = true;

    function init(){

        // 循環四次,稱為四行

        for(var i=0;i<4;i++){

            crow();

        }

        main.onclick = function(ev){

            if(sta == false){

                alert('game over!!!');

            }else if(ev.target.className == ''){

                clearInterval(c);

                sta = false;

                alert('game over!!!');

            }else{

                ev.target.className = '';

                ev.target.parentNode.p = true;

                var sc = document.getElementById('sc');

                var fs = parseInt(sc.innerHTML);

                sc.innerHTML =  fs+1;

                if(fs%5==0){

                    x +=1;

                }

            }

        }

        // 每隔一段時間就調用move函數

        c = setInterval(move,40);

    }

    // 初始化調用

    init();

</script>

</html>

繼續閱讀