add multi-tap commands for fast seeking and switching rtl
This commit is contained in:
parent
287686da78
commit
086a8112e6
|
@ -1,6 +1,10 @@
|
||||||
const PRELOAD_BACKWARD = 2;
|
const PRELOAD_BACKWARD = 2;
|
||||||
const PRELOAD_FORWARD = 8;
|
const PRELOAD_FORWARD = 8;
|
||||||
|
|
||||||
|
const COMMAND_SEQUENCE_MAX_INTERVAL = 400;
|
||||||
|
|
||||||
|
const ACCEL_PAGE_MOVEMENT = 10;
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
const currentImage = document.getElementById('current-image');
|
const currentImage = document.getElementById('current-image');
|
||||||
const preloadImages = document.getElementById('preload-images');
|
const preloadImages = document.getElementById('preload-images');
|
||||||
|
@ -14,6 +18,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
let timerLastRun = null;
|
let timerLastRun = null;
|
||||||
let timerAnimationRequestID = null;
|
let timerAnimationRequestID = null;
|
||||||
|
|
||||||
|
let commandSequence = [];
|
||||||
|
let lastCommandTime = 0;
|
||||||
|
|
||||||
function requestTimer() {
|
function requestTimer() {
|
||||||
timerAnimationRequestID = window.requestAnimationFrame(runTimer);
|
timerAnimationRequestID = window.requestAnimationFrame(runTimer);
|
||||||
}
|
}
|
||||||
|
@ -79,10 +86,17 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
elapsed = 0;
|
elapsed = 0;
|
||||||
updateBar();
|
updateBar();
|
||||||
|
|
||||||
|
if (pageNum >= IMAGES.length) {
|
||||||
|
pageNum = IMAGES.length - 1;
|
||||||
|
}
|
||||||
|
if (pageNum < 0) {
|
||||||
|
pageNum = 0;
|
||||||
|
}
|
||||||
|
|
||||||
const previous = IMAGES[currentPage];
|
const previous = IMAGES[currentPage];
|
||||||
const current = IMAGES[pageNum];
|
const current = IMAGES[pageNum];
|
||||||
|
|
||||||
if (current == null) {
|
if (current === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,20 +126,41 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateCommandSequence(cmd) {
|
||||||
|
const now = Date.now();
|
||||||
|
if (now - lastCommandTime > COMMAND_SEQUENCE_MAX_INTERVAL) {
|
||||||
|
commandSequence = [];
|
||||||
|
}
|
||||||
|
lastCommandTime = now;
|
||||||
|
commandSequence.push(cmd);
|
||||||
|
while (commandSequence.length > 3) {
|
||||||
|
commandSequence.shift();
|
||||||
|
}
|
||||||
|
|
||||||
|
const repeating = commandSequence.length === 3 && commandSequence[0] === cmd && commandSequence[1] === cmd;
|
||||||
|
const alternating = commandSequence.length === 3 && commandSequence[0] === cmd && commandSequence[1] !== cmd;
|
||||||
|
return {
|
||||||
|
pageMovement: repeating ? ACCEL_PAGE_MOVEMENT : 1,
|
||||||
|
setRtl: alternating,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function left() {
|
function left() {
|
||||||
if (currentPage === 0) {
|
const { pageMovement, setRtl } = updateCommandSequence("left");
|
||||||
|
if (currentPage === 0 || setRtl) {
|
||||||
rtl = true;
|
rtl = true;
|
||||||
localStorage.setItem(`${WORK_ID}-rtl`, rtl);
|
localStorage.setItem(`${WORK_ID}-rtl`, rtl);
|
||||||
}
|
}
|
||||||
changePage(currentPage + (rtl ? 1 : -1));
|
changePage(currentPage + ((rtl ? 1 : -1) * pageMovement));
|
||||||
}
|
}
|
||||||
|
|
||||||
function right() {
|
function right() {
|
||||||
if (currentPage === 0) {
|
const { pageMovement, setRtl } = updateCommandSequence("right");
|
||||||
|
if (currentPage === 0 || setRtl) {
|
||||||
rtl = false;
|
rtl = false;
|
||||||
localStorage.setItem(`${WORK_ID}-rtl`, rtl);
|
localStorage.setItem(`${WORK_ID}-rtl`, rtl);
|
||||||
}
|
}
|
||||||
changePage(currentPage + (rtl ? -1 : 1));
|
changePage(currentPage + ((rtl ? -1 : 1) * pageMovement));
|
||||||
}
|
}
|
||||||
|
|
||||||
function restart() {
|
function restart() {
|
||||||
|
|
Loading…
Reference in a new issue