liewchooichin's picture
Update draw-web-worker/main.js
36237b0 verified
/**
* Main script to call the worker.
* The canvas will be transferred to the Worker.
* The main script will pass the color and shape to the worker.
* The worker will then draw the shape with the color.
*/
const color = document.querySelector("#color");
const shape = document.querySelector("#shape");
// Use getElementById: No need to append the # in front of the id
const drawingArea = document.getElementById("drawingArea");
// offscreen canvas for worker
const offscreen = drawingArea.transferControlToOffscreen();
// Check if the window has Worker.
if (window.Worker) {
const worker = new Worker("./worker.js");
// transfer the offscreen to the worker
let messageToWorker = {
command: "getOffscreen",
canvas: offscreen
}
// The [] array buffer must be transferred to the Worker.
worker.postMessage(messageToWorker, [offscreen]);
worker.addEventListener("message", messageFromWorker);
// get the color and shape to draw
color.addEventListener("change", drawShape);
shape.addEventListener("change", drawShape);
// process message from worker
function messageFromWorker(message) {
console.log("Main: Message received from worker");
// get the status of work
if(message.data.status) {
console.log(`Main: Message from worker: ${message.data.result}`);
}
else {
console.log(`Main: Worker cannot complete the status for some reason.`)
}
}
// event listener to draw a shape
function drawShape(event) {
// initial selection will contain value="", then this to default
// lightgrey square.
validColor = (color.value!=="" ? color.value : "lightgrey");
validShape = (shape.value!==""? shape.value : "square");
const drawData = {
command: "draw",
selectedColor: validColor,
selectedShape: validShape
}
worker.postMessage(drawData);
worker.addEventListener("message", messageFromWorker);
}
} else {
console.log('Your browser doesn\'t support web workers.');
}