I created a player using HTML/JS/CSS, which I uploaded , specific use on the real server
, the player works correctly on high resolution (PC), but not working properly on mobile, for example, the preview does not work when hovering over the timeline with finger. I would like advice on how to fix it. Thank you in advance
¨
js - timeline part
// Timeline
timelineContainer.addEventListener("mousemove", handleTimeLineUpdate)
timelineContainer.addEventListener("mousedown", toggleScrubbing);
document.addEventListener("mouseup", e => {
if(isScrubbing) toggleScrubbing(e)
})
document.addEventListener("mousemove", e => {
if(isScrubbing) handleTimeLineUpdate(e)
})
let isScrubbing = false;
let wasPaused;
function toggleScrubbing(e){
const rect = timelineContainer.getBoundingClientRect();
const percent = Math.min(Math.max(0, e.x - rect.x), rect.width)/rect.width;
isScrubbing = (e.buttons & 1) === 1;
videoContainer.classList.toggle("scrubbing", isScrubbing)
if(isScrubbing){
wasPaused = video.paused;
video.pause();
} else {
video.currentTime = percent * video.duration;
if(!wasPaused) video.play();
}
handleTimeLineUpdate(e);
}
function handleTimeLineUpdate(e){
const rect = timelineContainer.getBoundingClientRect();
// e.x = position mous, rect.x = position timeline
const percent = Math.min(Math.max(0, e.x - rect.x), rect.width)/rect.width;
// /10 protože mám po 10 vterinach
const previewImgNumber = Math.max(1, Math.floor((percent*video.duration)/10));
const previewImgSrc = `video/preview${previewImgNumber}.jpg`;
// Uložení cesty k obrazku
previewImg.src = previewImgSrc;
timelineContainer.style.setProperty("--preview-position",percent);
if(isScrubbing)
{
e.preventDefault();
thumbnailImg.src = previewImgSrc;
timelineContainer.style.setProperty("--progress-position", percent);
}
}
Touch events are more complicated since there can be multiple touches that need to be tracked at one time as opposed to one mouse cursor. You can try adding the following listeners. It might do the trick or at least point you in the right direction:
// Timeline add touch listeners
timelineContainer.addEventListener("touchmove", handleTimeLineUpdate)
timelineContainer.addEventListener("touchstart", toggleScrubbing);
document.addEventListener("touchend", e => {
if(isScrubbing) toggleScrubbing(e)
})
document.addEventListener("touchmove", e => {
if(isScrubbing) handleTimeLineUpdate(e)
})
There's much more info here: https://developer.mozilla.org/en-US/docs/Web/API/Touch_events/Using_Touch_Events