Kolorowanka w JS

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
norvoles
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1113
Rejestracja: 04 sty 2008, 20:58
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Kolorowanka w JS

Post autor: norvoles »

Powstała dziś rano idea stworzenia kolorowanki, czyli stronki z obrazkiem po którym można sobie bazgrać. I teraz problem jest taki, że stworzyłem coś co kompletnie nie działa i nie mam żadnej koncepcji dlaczego :D
Generalnie za pomocą <canvas> robię sobie trzy warstwy: na obrazek, na bazgroły i na pędzel, no i próbuję to jakoś połączyć.

kolorowanka.html

Kod: Zaznacz cały

<html>
  <head>
    <title>Fun!</title>
    <script language="javascript" type="text/javascript" src="kolorowanka.js"></script>
    <link href="kolorowanka.css" type="text/css" rel="stylesheet">
  </head>

  <body>
    <div style="position: relative;">
      <canvas id="toplayer" width="600" height="600" style="z-index: 1;"></canvas>
      <canvas id="drawlayer" width="600" height="600" style="z-index: 2;"></canvas>
      <canvas id="imagelayer" width="600" height="600" style="z-index: 3;"></canvas>
    </div>
  </body>
</html>
kolorowanka.js

Kod: Zaznacz cały

window.onload = function() {
    var mousePos = {x: 20, y: 20};
    var top_layer_canvas = document.getElementById("toplayer");
    var draw_layer_canvas = document.getElementById("drawlayer");
    var image_layer_canvas = document.getElementById("imagelayer");
    var top_layer_context = document.getElementById("toplayer").getContext("2d");
    var draw_layer_context = document.getElementById("drawlayer").getContext("2d");
    var image_layer_context = document.getElementById("imagelayer").getContext("2d");
    var offsetY = 20;
    var offsetX = 20;
    var brush_size = 15;

    top_layer_canvas.onmousemove = handleMouseMove;
    top_layer_canvas.onclick = draw;
    setInterval( drawBrush, 10); 

    function handleMouseMove(event) {
        mousePos = {
            x: event.clientX - offsetX,
            y: event.clientY - offsetY
        };
        console.log(mousePos);
    }

    function draw(event) {
        alert(mousePos.x + ' ' + mousePos.y);

        draw_layer_context.fillStyle = "rgba(0,0,0,0.4)";
        draw_layer_context.strokeStyle = "rgba(0,153,255,0.4)";
        draw_layer_context.arc(mousePos.x, mousePos.y, brush_size, 0, 2*Math.PI, false);
        draw_layer_context.fill();
    }


    function drawBrush() {
        top_layer_context.clearRect(0, 0, top_layer_canvas.width, top_layer_canvas.height);
        top_layer_context.fillStyle = "rgba(0,0,0,0.4)";
        top_layer_context.strokeStyle = "rgba(0,153,255,0.4)";
        top_layer_context.arc(mousePos.x, mousePos.y, brush_size, 0, 2*Math.PI, false);
        top_layer_context.fill();
    }
}
kolorowanka.css

Kod: Zaznacz cały

canvas {
    border: 2px solid #000;
    float: center;
    margin-right: 20px;
    margin-bottom: 20px;
    position: absolute;
    left: 0;
    top: 0; 
}
Wielkie dzięki za wszelkie sugestie.
kobylecki
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 05 gru 2005, 18:11
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: Unity
Architektura: x86

Re: Kolorowanka w JS

Post autor: kobylecki »

Kod: Zaznacz cały

float: center;
jest zbyteczny przy

Kod: Zaznacz cały

position: absolute;
Dziwna konwencja tworzenia canvasu dla pędzla, zwłaszcza, że pędzel będzie myszką sterowany (może css cursor wystarczy?). Ja zrobił tylko jeden canvas, chociaż obrazek we tle też może sobie wisieć.
apb77
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 15 maja 2007, 13:52

Re: Kolorowanka w JS

Post autor: apb77 »

Ja bym zaczął od wyrzucenia funkcji poza deklarację zdarzenia window.onload.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: Kolorowanka w JS

Post autor: ethanak »

apb77 pisze:Ja bym zaczął od wyrzucenia funkcji poza deklarację zdarzenia window.onload.
No nie, poważnie? Możesz podać jakiś sensowny powód rezygnacji z closures i śmiecenia po globalnej przestrzeni nazw?
norvoles
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1113
Rejestracja: 04 sty 2008, 20:58
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Re: Kolorowanka w JS

Post autor: norvoles »

Ach, zapomniałem napisać co było źle, a to banał :P
Po prostu źle (odwrotnie) ustawiłem z-index. Element najwyżej powinien mieć największą wartość, a nie najmniejszą.
Po różnych późniejszych przeróbkach zadziałało jak miało.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości