jquery游戏在手机上运行缓慢

时间:2014-10-10 07:40:54

标签: javascript jquery

我最近正在编写一个简单的游戏,它在PC上正常运行,但它在手机上运行缓慢。我只是想知道问题是由我的代码还是由jquery引起的。 我应该在为手机编写游戏时使用jquery

这是演示:my game demo link

js code:

$(document).ready(function() {
    var min = 0;
    var max = 3;
    var windowHeight = $(window).height();
    var windowWidth = $(window).width();
    var rowHeight = windowHeight / 4 - 1;
    var colWidth = windowWidth / 4 - 1;
    var totalTime = 30;
    var score = 0;

    function layout() {
        $('.row').height(rowHeight);
        $('.col').width(colWidth);
    }

    function init () {
        layout();
        $('.row').each(function () {
            //var rand = Math.floor(Math.random() * (max - min + 1) + min); // return random number between min and max;
            var rand = Math.floor(Math.random() * max);
            $(this).children().eq(rand).addClass('active');
        });

        $('#time').text(totalTime);
    }

    function insertNewRow () {
        var rand = Math.floor(Math.random() * max);
        var newRowStr = '<div class="row">';
        for (var i = 0; i < 4; i++) {
            newRowStr += '<div class="col"></div>';
        }
        newRowStr += '</div>';
        var $newRow = $(newRowStr);
        $newRow.height(rowHeight).children().width(colWidth).eq(rand).addClass('active');
        $newRow.prependTo('#wrapper');
    }

    function removeLastRow () {
        $('.row:last').remove();
    }


    var counting;
    function startCountDown () {
        counting = setInterval(countDown, 1000);
    }

    function countDown() {
        var timeLeft = $('#time').text();
        timeLeft -= 1;
        $('#time').text(timeLeft);

        if (timeLeft == 0) {
            gameover();
        }
    }

    function gameover () {
        clearInterval(counting);
        $('#end').show().find('#score').text("your score:" + score);
    }

    function restartGame () {
        score = 0;
        $('#time').text(totalTime);
        startCountDown();
    }

    init();

    $('#wrapper').on('click', '.row:eq(3) .active', function (event) {
        event.preventDefault();
        score++;
        $(this).removeClass('active').addClass('clicked').parent().remove();
        //setTimeout(removeLastRow, 200);
        insertNewRow();
    }); 

    $('#launch').click(function (event) {
        event.preventDefault();
        $('#start').hide();
        startCountDown();
    });

    $('#retry').click(function (event) {
        event.preventDefault();
        $('#end').hide();
        restartGame();
    });
});

html代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
    <title>Game</title>
    <link rel="stylesheet" type="text/css" href="files/style.css">
    <script src="files/jquery.min.js"></script>
    <script src="files/game.js"></script>
</head>
<body>
    <div id="start">
        <a id="launch" href="#">START</a>
    </div>
    <div id="time"></div>
    <div id="end">
        <h1 id="score"></h1>
        <a id="retry" href="#">AGAIN</a>
    </div>
    <div id="wrapper">
        <div class="row">
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div>
        </div>
        <div class="row">
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div>
        </div>
        <div class="row">
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div> 
        </div>
        <div class="row">
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div>
            <div class="col"></div>
        </div>
    </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

一般来说,jQuery非常慢,因为我们拥有如此快速的计算机,所以很少见。但是你似乎在这里几乎每次互动都使用jQuery。您可以考虑对此进行一些改进。看看这篇关于这个问题的好文章。

jQuery Newbs: Stop Jumping in the Pool