Lettore a pagine: niente scroll libero, tap a destra = pagina dopo, tap a sinistra = pagina prima (fasce superiore/inferiore ai menu PullDown/PushUp). Alla fine/inizio capitolo il tap passa al capitolo successivo/precedente

This commit is contained in:
2026-08-19 16:02:54 +02:00
parent 585b8ba104
commit d7b522f483
+50
View File
@@ -127,6 +127,22 @@ Page {
page.restoring = false
}
}
// Paginazione a tap: niente scroll libero. La meta' destra va avanti di
// una pagina, la sinistra indietro. Le fasce superiore e inferiore sono
// lasciate ai menu (PullDown in alto, PushUp in basso).
MouseArea {
id: tapZone
anchors.fill: parent
anchors.topMargin: Theme.itemSizeLarge
anchors.bottomMargin: Theme.itemSizeLarge + Theme.paddingLarge
onClicked: {
if (mouse.x > width / 2)
page.nextPage()
else
page.prevPage()
}
}
}
BusyIndicator {
@@ -220,6 +236,40 @@ Page {
loadChapter()
}
// pagina successiva: se l'ultima pagina del capitolo, passa al capitolo dopo
function nextPage() {
if (!web.loaded || !page.ready)
return
web.runJavaScript(
"var vh=window.innerHeight;" +
"var cur=Math.floor(window.scrollY/vh);" +
"var max=Math.max(0,document.documentElement.scrollHeight-window.innerHeight);" +
"var target=(cur+1)*vh;" +
"if(target<=max){window.scrollTo(0,target);true}else{false}",
function(hasNext) {
if (hasNext)
readScrollPosition()
else
gotoChapter(page.currentChapter + 1)
})
}
// pagina precedente: se la prima del capitolo, torna al capitolo prima
function prevPage() {
if (!web.loaded || !page.ready)
return
web.runJavaScript(
"var vh=window.innerHeight;" +
"var cur=Math.floor(window.scrollY/vh);" +
"if(cur>0){window.scrollTo(0,(cur-1)*vh);true}else{false}",
function(hasPrev) {
if (hasPrev)
readScrollPosition()
else
gotoChapter(page.currentChapter - 1)
})
}
function fontPx() {
return Math.round(16 * page.fontScale * 100) / 100
}