簡體   English   中英

HTML5畫布圖像沒有移動

[英]HTML5 Canvas Image doesn't move

我有個問題。 我正在使用HTML5和Javascript在畫布上繪制框。 該框應該上下移動,但是在第一次渲染后,它不想在新位置重新渲染。 這是代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sl" lang="sl">
<head>
    <title>Spletna stran Portfolio - Domaca stran</title>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />

    <link rel="stylesheet" href="css/style.css" type="text/css" media="all" />      

    <script>
    var isMoving = true;

    var gradienty = 0;
    var gradientheight = 100;
    var gradientyVel = 1;

    var gradientImage = new Image();
    gradientImage.src = "grafika/gradient.gif";

    function main() {
        var c = document.getElementById("menuCanvas");
        var ctx = c.getContext("2d");
        ctx.drawImage(gradientImage, 0, gradienty);
        if(isMoving == true) {
            gradienty += gradientyVel;
            if((gradienty+gradientheight)==c,height || gradienty<=0) {
                gradientyVel *= -1;
            }
        }
    }

    function mainLoop() {
        setInterval(main(), 10);
    }

    </script>

</head>
<body onload="mainLoop()">
<canvas id="menuCanvas" width="195" height="400"></canvas>
</body>
</html>

我不知道為什么盒子不動。 就像我第一次繪制后,下次將不再繪制。 另外,我將mainLoop()函數用作主循環。 我基本上每10毫秒調用一次main()函數,該函數執行繪制和邏輯處理。 任何幫助將非常感激。 :)

一些編碼問題:

您需要給圖像加載時間,然后開始動畫

var gradientImage = new Image();
gradientImage.onload=function(){
    setInterval(main, 20);
}
gradientImage.src = "house16x16.png";

setInterval接受一個函數指針(不帶括號):

setInterval僅能以最快16ms的速度觸發,因此您的10ms值太小

    setInterval(main, 20);

這是修改后的代碼和演示: http : //jsfiddle.net/m1erickson/U6K9j/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    canvas{border:1px solid red;}
</style>
<script>
$(function(){

    var c=document.getElementById("menuCanvas");
    var ctx=c.getContext("2d");

var isMoving = true;

var gradienty = 0;
var gradientheight = 100;
var gradientyVel = 1;

var gradientImage = new Image();
gradientImage.onload=function(){
    setInterval(main, 20);
}
gradientImage.src = "house16x16.png";

function main() {
    ctx.clearRect(0,0,c.width,c.height);
    ctx.drawImage(gradientImage, 0, gradienty);
    if(isMoving == true) {
        gradienty += gradientyVel;
        if((gradienty+gradientheight)==c.height || gradienty<=0) {
            gradientyVel *= -1;
        }
    }
}

}); // end $(function(){});
</script>
</head>
<body>
    <canvas id="menuCanvas" width=300 height=300></canvas>
</body>
</html>

您正在調用main ,然后將RESULT傳遞給setInterval 只是改變

function mainLoop() {
    setInterval(main(), 10);
}

function mainLoop() {
    setInterval(main, 10);
}

這可以幫助您入門,但是您還需要在兩次繪制之間清除畫布。 (您會注意到,如果您運行此程序)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM