Hi, ich hab dir hier mal ein Beispiel, es ist nicht perfekt und etwas umständlich aber von der Performance her gesehen die beste Variante, funktioniert mit Maus und Touch.
Aber du kannst so die Tastatur auf jedem Tastenklick verschieben, was etwas nervt, besser ist es die Tastatur in ein Container zu stecken und das verschieben nur an einer bestimmten Stelle zu zulassen, soll ja nur ein schnelles Beispiel sein.
Diesen Code in eine normale JS Funktion packen, diese rufst du beim Desktop onAttached Event auf.
let tastatur = document.querySelector('#TcHmiKeyboard');
// Tastatur einblenden bei Input Click
let inputControls = document.querySelectorAll(`[data-tchmi-type="tchmi-textbox"]`);
for (let control of inputControls) {
control.addEventListener("click", e => {
if (tastatur.style.display === 'none') {
tastatur.style.display = 'block';
}
});
}
// Tastatur verschiebbar machen
tastatur.style.transform = `translate(0px, 0px)`;
let x, y, t;
function mousemove(e) {
if (e.buttons === 0) {
window.removeEventListener("mousemove", mousemove);
} else {
tastatur.style.transform = `translate(${e.clientX - x}px, ${e.clientY - y}px)`;
}
}
tastatur.addEventListener("mousedown", e => {
t = tastatur.style.transform.replace(/[^0-9\-.,]/g, '').split(',');
if (e.button === 0) {
x = e.clientX - t[0];
y = e.clientY - t[1];
window.addEventListener("mousemove", mousemove);
}
});
function touchmove(e) {
tastatur.style.transform = `translate(${e.changedTouches[0].clientX - x}px, ${e.changedTouches[0].clientY - y}px)`;
e.stopPropagation();
}
tastatur.addEventListener("touchstart", e => {
t = tastatur.style.transform.replace(/[^0-9\-.,]/g, '').split(',');
x = e.changedTouches[0].clientX - t[0];
y = e.changedTouches[0].clientY - t[1];
window.addEventListener("touchmove", touchmove);
e.stopPropagation();
});
tastatur.addEventListener("touchend", e => {
window.removeEventListener("touchmove", touchmove);
e.stopPropagation();
});