Helló!
Lássuk hogyan is tudunk mozgásra bírni dolgokat a képernyőn html5-öt és js-et használva.
Hozzunk létre egy új Javascript blank app projektet és nyissuk meg a default.html fájlt, majd hozzunk létre benne két gombot “Move” (ennek hatására elindul az animációnk) és “Stop” (ez pedig megállítja) névvel és hozzuk létre a canvasunkat is.
<button onclick="m.m1()">Move</button> <button onclick="m.m2()">Stop</button> <canvas id="canvas"></canvas>
(az onclickről később)
Ha ezzel megvagyunk jöhet is a default.js. Nyissuk meg a fájlt majd hozzunk létre néhány szükséges változót
var canvas, context; // canvas inicializalasahoz kell var a = 250; // a kor kozeppontjanak y koordinataja var b = 1; // jobbra vagy balra mozogjon a kor var x = false; // van mozgas vagy nincs
Ezután hozzuk létre az “initialize()” függvényünket amiben létrehozzuk a canvas-t és az animációkat amit a következő képpen tudunk megtenni:
window.onload = initialize;
function initialize() {
canvas = document.getElementById("canvas");
canvas.width = window.innerWidth; //canvas szelessege kepernyo szeles
canvas.height = window.innerHeight; //canvas szelessege kepernyo magas
context = canvas.getContext("2d");
//ketfele keppen hozhatunk letre animaciot
requestAnimationFrame(move); // canvas ujrarajzolasa 1
setInterval(function () { redraw()}, 6); // canvas ujrarajzolasa 2
}
Akkor most irjuk meg a move() es a redraw() fuggvenyeket, hogy működjön is.
function redraw() {
context.beginPath();
context.fillStyle = "blue";
if (a > 500) //ha a kor y koordinátája nagyobb mint 500 akkor irányváltás
b *= -1;
if (a < 250) //ha a kor y koordinátája kisebb mint 250 akkor irányváltás
b *= -1;
context.arc(a, 350, 20, 0, Math.PI * 2, true); // kezdo kor kirajzolasa
//ha rákattintunk a Move gombra x=true
if(x)
//mozgatás jobbra balra y koord. szerint 250 és 500 kozott
context.arc(a += b, 350, 20, 0, Math.PI * 2, true);
context.fill();
}
Most nézzük a move() függvényt(kis különbséggel ugyan az mint az előbb):
function move() {
canvas.width = canvas.width; // képernyő törlése
context.beginPath();
context.fillStyle = "blue";
if (a > 500)
b *= -1;
if (a < 250)
b *= -1;
context.arc(a, 250, 20, 0, Math.PI * 2, true); // kezdo kor kirajzolasa
if (x)
context.arc(a += b, 250, 20, 0, Math.PI * 2, true); // mozgatas
context.fill();
requestAnimationFrame(move);
}
Már csak a gombok kezelése van hátra. Elöszőr is írjuk meg a két (on(), off()) fügvényünket ami nem lesz túl bonyolult mindössze az “x” változót állítja “true”-ra vagy “false”-ra
function on() {
x = true;
function off() {
x = false;
}
Ha ez is megvan már csak egy aprócska lépés van hátra mégpedig, hogy létrehozzunk egy névteret amin keresztül elérjük ezeket a függvényeket a html fájlunkból:
WinJS.Namespace.define("m", { m1: on, m2:off}); // namespace a gombokhoz
Ezután az ‘az oncllick’-nek már átadható m1() ill. m2() függvény ahogy ezt az elején csináltuk.
A gombok középre helyezéséhez a default.css-be írjuk be a következőket:
body {
text-align:center;
background-color:coral;
}
Ha mindennel megvagyunk futtasuk a projektet és próbáljuk ki.
A forrás innen letölthető: CanvasDemo2
Üdv: Balázs