mirror of
https://github.com/danbulant/Mangades
synced 2026-09-20 14:54:18 +00:00
improved keyboard handling; scroll support for manhwa
This commit is contained in:
parent
8fb3fb4848
commit
ff1f8d8c0d
1 changed files with 70 additions and 5 deletions
|
|
@ -16,32 +16,65 @@
|
||||||
|
|
||||||
var quality = "data";
|
var quality = "data";
|
||||||
|
|
||||||
|
var wasArrowUpUp = true;
|
||||||
|
var wasArrowDownUp = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {KeyboardEvent} e
|
* @param {KeyboardEvent} e
|
||||||
*/
|
*/
|
||||||
function keydown(e) {
|
function keydown(e) {
|
||||||
|
if(!image.complete) return false;
|
||||||
|
if(!wasArrowDownUp || !wasArrowUpUp) return;
|
||||||
switch(e.key) {
|
switch(e.key) {
|
||||||
case "ArrowLeft":
|
|
||||||
case "PageUp":
|
case "PageUp":
|
||||||
case "ArrowUp":
|
case "ArrowUp":
|
||||||
|
wasArrowUpUp = false;
|
||||||
|
if(0 < document.scrollingElement.scrollTop) return;
|
||||||
|
case "ArrowLeft":
|
||||||
prev();
|
prev();
|
||||||
break;
|
break;
|
||||||
case "ArrowRight":
|
|
||||||
case "PageDown":
|
case "PageDown":
|
||||||
case "ArrowDown":
|
case "ArrowDown":
|
||||||
|
wasArrowDownUp = false;
|
||||||
|
if(document.scrollingElement.scrollHeight > document.scrollingElement.offsetHeight + document.scrollingElement.scrollTop) return;
|
||||||
|
case "ArrowRight":
|
||||||
next();
|
next();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {KeyboardEvent} e
|
||||||
|
*/
|
||||||
|
function keyup(e) {
|
||||||
|
switch(e.key) {
|
||||||
|
case "PageUp":
|
||||||
|
case "ArrowUp":
|
||||||
|
wasArrowUpUp = true;
|
||||||
|
break;
|
||||||
|
case "PageDown":
|
||||||
|
case "ArrowDown":
|
||||||
|
wasArrowDownUp = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function next() {
|
function next() {
|
||||||
|
if(!image.complete) return;
|
||||||
if(page > (chapter.data.attributes[quality].length - 2)) return;
|
if(page > (chapter.data.attributes[quality].length - 2)) return;
|
||||||
$goto("./" + (parseInt(page) + 1));
|
$goto("./" + (parseInt(page) + 1));
|
||||||
|
document.scrollingElement.scrollTo({
|
||||||
|
top: 0
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function prev() {
|
function prev() {
|
||||||
|
if(!image.complete) return;
|
||||||
if(page < 2) return;
|
if(page < 2) return;
|
||||||
$goto("./" + (page - 1));
|
$goto("./" + (page - 1));
|
||||||
|
document.scrollingElement.scrollTo({
|
||||||
|
top: 0
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -84,7 +117,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
function handleTouchMove(evt) {
|
function handleTouchMove(evt) {
|
||||||
if ( ! xDown || ! yDown ) {
|
if (!xDown || !yDown) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -108,9 +141,41 @@
|
||||||
xDown = null;
|
xDown = null;
|
||||||
yDown = null;
|
yDown = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//for zoom detection
|
||||||
|
var px_ratio = window.devicePixelRatio || window.screen.availWidth / document.documentElement.clientWidth;
|
||||||
|
|
||||||
|
function isZooming(){
|
||||||
|
var newPx_ratio = window.devicePixelRatio || window.screen.availWidth / document.documentElement.clientWidth;
|
||||||
|
if(newPx_ratio != px_ratio){
|
||||||
|
px_ratio = newPx_ratio;
|
||||||
|
console.log("Zoomed to", px_ratio);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
var imageWidth;
|
||||||
|
/** @type {number} */
|
||||||
|
var imageHeight = Infinity;
|
||||||
|
/** @type {HTMLImageElement} */
|
||||||
|
var image;
|
||||||
|
var ratio = 0;
|
||||||
|
$: actualHeight = ratio > 1 ? document.body.clientHeight * ratio : document.body.clientHeight - 17;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Event} e
|
||||||
|
*/
|
||||||
|
function loaded(e) {
|
||||||
|
/** @type {HTMLImageElement}*/
|
||||||
|
var image = e.target;
|
||||||
|
imageWidth = image.naturalWidth;
|
||||||
|
imageHeight = image.naturalHeight;
|
||||||
|
|
||||||
|
ratio = imageHeight / imageWidth - 3;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:window on:keydown={keydown} />
|
<svelte:window on:keydown={keydown} on:keyup={keyup} on:resize={isZooming} />
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>{manga.title.en} Chapter {chapter.data.attributes.chapter} Page {page}</title>
|
<title>{manga.title.en} Chapter {chapter.data.attributes.chapter} Page {page}</title>
|
||||||
|
|
@ -120,7 +185,7 @@
|
||||||
<a class="back" href={$url("../..")}>Back to chapter list</a>
|
<a class="back" href={$url("../..")}>Back to chapter list</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<img draggable={false} on:touchstart={handleTouchStart} on:touchmove={handleTouchMove} on:mousedown={mouseclick} on:mouseup={preventDefault} src={`${atHome}/${quality}/${chapter.data.attributes.hash}/${chapter.data.attributes[quality][page - 1]}`} alt="Page {page} in chapter {chapter.data.attributes.chapter} of {manga.title.en}">
|
<img draggable={false} bind:this={image} style="height: {actualHeight}px" on:load={loaded} on:touchstart={handleTouchStart} on:touchmove={handleTouchMove} on:mousedown={mouseclick} on:mouseup={preventDefault} src={`${atHome}/${quality}/${chapter.data.attributes.hash}/${chapter.data.attributes[quality][page - 1]}`} alt="Page {page} in chapter {chapter.data.attributes.chapter} of {manga.title.en}">
|
||||||
|
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
{#if page > 1}
|
{#if page > 1}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue