125 lines
2.8 KiB
JavaScript
125 lines
2.8 KiB
JavaScript
let direction = null;
|
|
|
|
const drawText = async (textData) => {
|
|
const text = document.getElementById("text");
|
|
let {position} = textData;
|
|
switch (textData.position) {
|
|
case "left":
|
|
addClass(text, position);
|
|
direction = "left";
|
|
break;
|
|
case "top":
|
|
addClass(text, position);
|
|
direction = "top";
|
|
break;
|
|
case "right":
|
|
addClass(text, position);
|
|
direction = "right";
|
|
break;
|
|
default:
|
|
addClass(text, "left");
|
|
direction = "left";
|
|
break;
|
|
}
|
|
|
|
text.innerHTML = textData.text;
|
|
document.getElementById("drawtext-container").style.display = "block";
|
|
await sleep(100);
|
|
addClass(text, "show");
|
|
};
|
|
|
|
const changeText = async (textData) => {
|
|
const text = document.getElementById("text");
|
|
let {position} = textData;
|
|
|
|
removeClass(text, "show");
|
|
addClass(text, "pressed");
|
|
addClass(text, "hide");
|
|
|
|
await sleep(500);
|
|
removeClass(text, "left");
|
|
removeClass(text, "right");
|
|
removeClass(text, "top");
|
|
removeClass(text, "bottom");
|
|
removeClass(text, "hide");
|
|
removeClass(text, "pressed");
|
|
|
|
switch (textData.position) {
|
|
case "left":
|
|
addClass(text, position);
|
|
direction = "left";
|
|
break;
|
|
case "top":
|
|
addClass(text, position);
|
|
direction = "top";
|
|
break;
|
|
case "right":
|
|
addClass(text, position);
|
|
direction = "right";
|
|
break;
|
|
default:
|
|
addClass(text, "left");
|
|
direction = "left";
|
|
break;
|
|
}
|
|
text.innerHTML = textData.text;
|
|
|
|
await sleep(100);
|
|
text.classList.add("show");
|
|
};
|
|
|
|
const hideText = async () => {
|
|
const text = document.getElementById("text");
|
|
removeClass(text, "show");
|
|
addClass(text, "hide");
|
|
|
|
setTimeout(() => {
|
|
removeClass(text, "left");
|
|
removeClass(text, "right");
|
|
removeClass(text, "top");
|
|
removeClass(text, "bottom");
|
|
removeClass(text, "hide");
|
|
removeClass(text, "pressed");
|
|
document.getElementById("drawtext-container").style.display = "none";
|
|
}, 1000);
|
|
};
|
|
|
|
const keyPressed = () => {
|
|
const text = document.getElementById("text");
|
|
addClass(text, "pressed");
|
|
};
|
|
|
|
window.addEventListener("message", (event) => {
|
|
const data = event.data;
|
|
const action = data.action;
|
|
const textData = data.data;
|
|
switch (action) {
|
|
case "DRAW_TEXT":
|
|
return drawText(textData);
|
|
case "CHANGE_TEXT":
|
|
return changeText(textData);
|
|
case "HIDE_TEXT":
|
|
return hideText();
|
|
case "KEY_PRESSED":
|
|
return keyPressed();
|
|
default:
|
|
return;
|
|
}
|
|
});
|
|
|
|
const sleep = (ms) => {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
};
|
|
|
|
const removeClass = (element, name) => {
|
|
if (element.classList.contains(name)) {
|
|
element.classList.remove(name);
|
|
}
|
|
};
|
|
|
|
const addClass = (element, name) => {
|
|
if (!element.classList.contains(name)) {
|
|
element.classList.add(name);
|
|
}
|
|
};
|