簡體   English   中英

JavaScript彈跳球-視口可在加載時自動調整動畫畫布的大小?

[英]Javascript bouncing ball - viewport to automatically resize animation canvas on load?

我希望在響應式畫布中有一個JavaScript彈跳球。

我的目標是使動畫畫布具有與其加載的視口相同的大小,而不是具有固定大小的畫布(當前為1366x768)。

問題是,如果有人用320像素的視口在移動設備上加載頁面,他們將錯過部分動畫及其唯一目的。

到目前為止,通過反復試驗,我了解了此腳本:

<script>
var context;
var x=100;
var y=200;
var dx=5;
var dy=5;

function init()
{
    context= myCanvas.getContext('2d');
    setInterval(draw,10);
}

function draw()
{
    context.clearRect(0,0,1366,768);
    context.beginPath();
    context.fillStyle="#fedc00";
    // Draws a circle of radius 20 at the coordinates 100,100 on the canvas
    context.arc(x,y,16,0,Math.PI*2,true);
    context.closePath();
    context.fill();
    // Boundary Logic
    if( x<0 || x>1366) dx=-dx; 
    if( y<0 || y>768) dy=-dy; 
    x+=dx; 
    y+=dy;
}
</script>

和HTML

<body onLoad="init();">

<div class="canvas">
    <canvas id="myCanvas" width="1366" height="768">
    </canvas>
</div>

我想知道這是否需要用javascript完成,或者腳本是否根本不應該提及畫布大小(應為視口寬度/高度的100%),並在CSS中使用媒體查詢來解決?

您能否給我一些有關我需要從腳本中添加/刪除使其正常工作的指針?

提前致謝!

我在這部分中看到您正在使用固定參數:

// Boundary Logic
if( x<0 || x>1366) dx=-dx; 
if( y<0 || y>768) dy=-dy; 

您正在將球距擴展到超出移動屏幕的范圍。 您應該使這些值動態化。

window.innerWidth  //instead of 1366
window.innerHeigth //instead of 768

如果您在瀏覽器窗口縮小到例如500像素寬的情況下刷新頁面,則該球到達窗口右側時應該會反彈。

無論如何,這還不止於此,我們必須添加一個偏移量,即球的直徑,因為您希望它看起來像在彈跳。

讓我知道以上方法是否有效,稍后我們將進行調整。

暫無
暫無

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

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