Witam,
zacząłem poznawać canvas z książką "HTML5 Canvas", rok jej wydania to 2013 i jest trochę nieaktualna. Chciałbym prosić o pomoc w uruchomieniu skryptu. Po otworzeniu konsoli otrzymuję błąd w postaci: "Uncaught ReferenceError: Events is not defined(...)"
Kod events.js:
function addPoint(events, points){
var context = events.getContext();
var drawingPos = events.getMousePos();
if(drawingPos !== null){
points.push(drawingPos);
}
}
function drawPath(canvas, points, canvasImg){
var context = canvas.getContext("2d");
//wyczyszczenie płótna
context.clearRect(0,0,canvas.width, canvas.height);
//przerysowanie płótna przed wyświetleniem ścieżki
context.drawImage(canvasImg, 0, 0, canvas.width, canvas.height);
//wyświetlenie ścieżki
context.beginPatch();
context.lineTo(points[0].x, points[0].y);
for(var n = 1; n < points.length; n++){
var point = points[n];
context,lineTo(point.x, point.y);
}
context.stroke();
}
//Funkcja aktualizująca kolor tła prostokąna prezentującego kolor na pasku narzędzi:
function updateColorSquare(){
var red = document.getElementById("Red").value;
var green = document.getElementById("Green").value;
var blue = document.getElementById("Blue").value;
var colorSquare = document.getElementById("colorSquare");
colorSquare.style.backgroundColor = "rgb(" + red + "," + green + "," + blue + ")";
}
//Funkcja zwracająca obiekt obrazka reprezentującego zawartość elementu canvas:
function getCanvasImg(canvas){
var img = new Image();
img.src = canvas.toDataURL();
return img;
}
//obiekt Events reprezentujący zawartość elementu canvas, inicjalizujący kolor jakim użytkownik będzie rysować, oraz szerokość linii:
window.onload = function(){
var events = new Events("myCanvas");
var canvas = events.getCanvas();
var context = events.getContext();
var isMouseDown = false;
var canvasImg = getCanvasImg(canvas);
var points = [];
//inicjalizacja parametrów rysowania
var red = document.getElementById("red").value;
var green = document.getElementById("green").value;
var blue = document.getElementById("blue").value;
var size = document.getElementById("size").value;
//aktualizacja sekwencji koloru po wprowadzeniu nowych danych
//dodanie procedur obsługi zdarzeń
document.getElementById("red").addEventListener("keyup", function(evt){
updateColorSquare();
}, false);
document.getElementById("green").addEventListener("keyup", function(evt){
updateColorSquare();
}, false);
document.getElementById("blue").addEventListener("keyup", function(evt){
updateColorSquare();
}, false);
//czyszczenie płótna, gdy użytkownik kliknie przycisk wyczyść:
document.getElementById("clearButton").addEventListener("click", function(evt){
events.clear();
points =[];
canvasImg = getCanvasImg(canvas);
}, false);
//zapis - skonwertowana zawartość elementu canvas na postac danych URL i wyświetlenie rysunku jako obrazek w nowym oknie przeglądarki
document.getElementById("saveButton").addEventListener("click", function(evt){
//otworzenie nowego okna z zapisanym rysunkiem, tak by użytkownik mógł go kliknąć i zapisać na swoim komputerze
window.open(canvas.toDataURL());
}, false);
//pobieranie bieżącej pozycji myszki, określenie koloru, szerokości linii i stylu ścieżki, dodanie pierwszego punktu do tablicy a następnie przypisanie fladze isMouseDown wartości TRUE
canvas.addEventListener("mousedown", function(){
var drawingPos = events.getMousePos();
//aktualizacja parametrów rysowania
red = document.getElementById("red").value;
green = document.getElementById("green").value;
blue = document.getElementById("blue").value;
size = document.getElementById("size").value;
//rozpoczęcie rysowania ścieżki
context.strokeStyle = "rgb(" + red + "," + green + "," + blue + ")";
context.lineWidth = size;
context.lineJoin = "round";
context.lineCap = "round";
addPoint(events, points);
isMouseDown = true;
}, false);
//w ramach obsługi zdarzenia mouseup przypisać fladze isMouseDown wartość false, narysować ścieżkę, a następnie zpaisać obrazek stanowiący zawartość elementy canvas:
canvas.addEventListener("mouseup", function(){
isMouseDown = false;
if(points.length > 0) {
drawPath(this, points, canvasImg);
//wyczyszczenie punktów
points = [];
}
canvas = getCanvasImg(this);
}, false);
//Kiedy użytkownik usunie wskaźnik myszy obszaru elementu, zasymulować zdarzenie mouseup
canvas.addEventListener("mouseout", function(){
if(document.createEvent){
var evt = document.createEvent('MouseEvents');
evt.initEvent("mouseup", true, false);
this.dispatchEvent(evt);
}
else {
this.fireEvent("onmouseup");
}
}, false);
//Określenie funkcji stage() która będzie nieustannie dodawać do aktualnej ścieżki nowe punkty, o ile tylko użytkownik przesuwa wskaźnik myszy, naciskając przy tym jej przycisk:
events.setDrawStage(function(){
if(isMouseDown){
addPoint(this,points);
drawPath(canvas, points, canvasImg);
}
});
};
Fragment kodu index.html:
<div id="toolbar">
<label>
Kolor:
</label>
R: <input type="text" id="red" maxlength="3" class="short" value="0">
G: <input type="text" id="green" maxlength="3" class="short" value="0">
B: <input type="text" id="blue" maxlength="3" class="short" value="255">
<div id="colorSquare">
</div>
<label>
Wielkość:
</label>
<input type="text" id="size" maxlength="3" class="short" value="20">px
<input type="button" id="clearButton"value="Wyczyść">
<input type="button" id="saveButton"value="Zapisz">
</div>
<canvs id="myCanvas" width="600" heigth="250">
</canvs>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
<script src="js/script.js"></script>
<script src="js/events.js"></script>
Problem leży w tworzeniu obiektu Events w pliku events.js, linia: "var events = new Events("myCanvas");". Czy mógłby ktoś pomóc? Z góry piękne dzięki :*