export function initMobileWidescreen() { // Mobile widescreen button if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { // Add Button to fit screen var controls = document.getElementsByClassName('plyr__controls')[0]; var newButton = ` `; controls.insertAdjacentHTML('beforeend', newButton); // Add event listener var stateButton = true; var videoTemp = document.querySelector('video'); const mobilebutton = document.getElementById('mobile-screen'); mobilebutton.addEventListener('click', function() { if (! stateButton) { videoTemp.style.objectFit = 'cover'; stateButton = true; } else { videoTemp.style.objectFit = null; stateButton = false; } }); // Set default videoTemp.style.objectFit = 'cover'; } } export function mobileDoubleClick(player) { if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { const byClass = document.getElementsByClassName.bind(document), createElement = document.createElement.bind(document); // Remove all dblclick stuffs player.eventListeners.forEach(function (eventListener) { if (eventListener.type === 'dblclick') { eventListener.element.removeEventListener(eventListener.type, eventListener.callback, eventListener.options); } }); // Create overlay that will show the skipped time const skip_ol = createElement("div"); skip_ol.id = "plyr__time_skip" byClass("plyr")[0].appendChild(skip_ol) // A class to manage multi click count and remember last clicked side (may cause issue otherwise) class multiclick_counter { constructor() { this.timers = []; // collection of timers. Important this.count = 0; // click count this.reseted = 0; // before resetting what was the count this.last_side = null; // L C R 3sides } clicked() { this.count += 1 var xcount = this.count; // will be checked if click count increased in the time this.timers.push(setTimeout(this.reset.bind(this, xcount), 500)); // wait till 500ms for next click return this.count } reset_count(n) { // Reset count if clicked on the different side this.reseted = this.count this.count = n for (var i = 0; i < this.timers.length; i++) { clearTimeout(this.timers[i]); } this.timer = [] } reset(xcount) { if (this.count > xcount) { return } // return if clicked after timer started // Reset otherwise this.count = 0; this.last_side = null; this.reseted = 0; skip_ol.style.opacity = "0"; this.timer = [] } } var counter = new multiclick_counter(); const poster = byClass("plyr__poster")[0] poster.onclick = function (e) { const count = counter.clicked() if (count < 2) { return } // if not double click const rect = e.target.getBoundingClientRect(); const x = e.clientX - rect.left; //x position within the element. // The relative position of click on video const width = e.target.offsetWidth; const perc = x * 100 / width; var panic = true; // panic if the side needs to be checked var last_click = counter.last_side if (last_click == null) { panic = false } if (perc < 40) { if (player.currentTime == 0) { return // won't seek beyond 0 } counter.last_side = "L" if (panic && last_click != "L") { counter.reset_count(1) return } skip_ol.style.opacity = "0.9"; player.rewind() skip_ol.innerHTML = " " + ((count - 1) * 10) + "s"; } else if (perc > 60) { if (player.currentTime == player.duration) { return // won't seek beyond duration } counter.last_side = "R" if (panic && last_click != "R") { counter.reset_count(1) return } skip_ol.style.opacity = "0.9"; last_click = "R" player.forward() skip_ol.innerHTML = " " + ((count - 1) * 10) + "s"; } else { player.togglePlay() counter.last_click = "C" } } } }