From 5f5df1e5b71a547769126ae30c9540a2f36e1e8a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 6 Nov 2019 20:02:21 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B6=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=82=D0=B0=D1=87=D1=81=D0=BA=D1=80=D0=B8=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Reader/HelpPage/HelpPage.vue | 2 +- .../HelpPage/MouseHelpPage/MouseHelpPage.vue | 14 ++- .../components/Reader/TextPage/TextPage.vue | 115 +++++++++++++----- client/components/Reader/versionHistory.js | 17 +++ 4 files changed, 117 insertions(+), 31 deletions(-) diff --git a/client/components/Reader/HelpPage/HelpPage.vue b/client/components/Reader/HelpPage/HelpPage.vue index 815e3ac3..d19001ab 100644 --- a/client/components/Reader/HelpPage/HelpPage.vue +++ b/client/components/Reader/HelpPage/HelpPage.vue @@ -11,7 +11,7 @@ - + diff --git a/client/components/Reader/HelpPage/MouseHelpPage/MouseHelpPage.vue b/client/components/Reader/HelpPage/MouseHelpPage/MouseHelpPage.vue index e1fe843b..bd250ab8 100644 --- a/client/components/Reader/HelpPage/MouseHelpPage/MouseHelpPage.vue +++ b/client/components/Reader/HelpPage/MouseHelpPage/MouseHelpPage.vue @@ -1,15 +1,25 @@ diff --git a/client/components/Reader/TextPage/TextPage.vue b/client/components/Reader/TextPage/TextPage.vue index 77c51b4f..9369eccc 100644 --- a/client/components/Reader/TextPage/TextPage.vue +++ b/client/components/Reader/TextPage/TextPage.vue @@ -19,7 +19,7 @@
@@ -877,6 +877,14 @@ class TextPage extends Vue { this.$emit('tool-bar-toggle'); } + doScrollingToggle() { + this.$emit('scrolling-toggle'); + } + + doFullScreenToggle() { + this.$emit('full-screen-toogle'); + } + async doFontSizeInc() { if (!this.settingsChanging) { this.settingsChanging = true; @@ -968,7 +976,7 @@ class TextPage extends Vue { case 'Enter': case 'Backquote'://` case 'KeyF': - this.$emit('full-screen-toogle'); + this.doFullScreenToggle(); break; case 'Tab': case 'KeyQ': @@ -1009,22 +1017,64 @@ class TextPage extends Vue { if (!this.$isMobileDevice) return; this.endClickRepeat(); + if (event.touches.length == 1) { const touch = event.touches[0]; const rect = event.target.getBoundingClientRect(); const x = touch.pageX - rect.left; const y = touch.pageY - rect.top; - if (this.handleClick(x, y)) { - this.repDoing = true; - this.debouncedStartClickRepeat(x, y); + const hc = this.handleClick(x, y, new Set(['Menu'])); + if (hc) { + if (hc != 'Menu') { + this.repDoing = true; + this.debouncedStartClickRepeat(x, y); + } else { + this.startTouch = {x, y}; + } } } } - onTouchEnd() { + onTouchMove(event) { + if (this.startTouch) { + event.preventDefault(); + } + } + + onTouchEnd(event) { if (!this.$isMobileDevice) return; this.endClickRepeat(); + + if (event.changedTouches.length == 1) { + const touch = event.changedTouches[0]; + const rect = event.target.getBoundingClientRect(); + const x = touch.pageX - rect.left; + const y = touch.pageY - rect.top; + if (this.startTouch) { + const dy = this.startTouch.y - y; + const dx = this.startTouch.x - x; + const moveDelta = 30; + const touchDelta = 15; + if (dy > 0 && Math.abs(dy) >= moveDelta && Math.abs(dy) > Math.abs(dx)) { + //движение вверх + this.doFullScreenToggle(); + } else if (dy < 0 && Math.abs(dy) >= moveDelta && Math.abs(dy) > Math.abs(dx)) { + //движение вниз + this.doScrollingToggle(); + } else if (dx > 0 && Math.abs(dx) >= moveDelta && Math.abs(dy) < Math.abs(dx)) { + //движение влево + this.doScrollingSpeedDown(); + } else if (dx < 0 && Math.abs(dx) >= moveDelta && Math.abs(dy) < Math.abs(dx)) { + //движение вправо + this.doScrollingSpeedUp(); + } else if (Math.abs(dy) < touchDelta && Math.abs(dx) < touchDelta) { + this.doToolBarToggle(); + } + + this.startTouch = null; + } + } } onTouchCancel() { @@ -1038,12 +1088,13 @@ class TextPage extends Vue { return; this.endClickRepeat(); if (event.button == 0) { - if (this.handleClick(event.offsetX, event.offsetY)) { + const hc = this.handleClick(event.offsetX, event.offsetY); + if (hc && hc != 'Menu') { this.repDoing = true; this.debouncedStartClickRepeat(event.offsetX, event.offsetY); } } else if (event.button == 1) { - this.$emit('scrolling-toggle'); + this.doScrollingToggle(); } else if (event.button == 2) { this.doToolBarToggle(); } @@ -1074,7 +1125,7 @@ class TextPage extends Vue { } } - handleClick(pointX, pointY) { + getClickAction(pointX, pointY) { const w = pointX/this.realWidth*100; const h = pointY/this.realHeight*100; @@ -1090,27 +1141,35 @@ class TextPage extends Vue { } } - switch (action) { - case 'Down' ://Down - this.doDown(); - break; - case 'Up' ://Up - this.doUp(); - break; - case 'PgDown' ://PgDown - this.doPageDown(); - break; - case 'PgUp' ://PgUp - this.doPageUp(); - break; - case 'Menu' : - this.doToolBarToggle(); - break; - default : - // Nothing + return action; + } + + handleClick(pointX, pointY, exclude) { + const action = this.getClickAction(pointX, pointY); + + if (!exclude || !exclude.has(action)) { + switch (action) { + case 'Down' ://Down + this.doDown(); + break; + case 'Up' ://Up + this.doUp(); + break; + case 'PgDown' ://PgDown + this.doPageDown(); + break; + case 'PgUp' ://PgUp + this.doPageUp(); + break; + case 'Menu' : + this.doToolBarToggle(); + break; + default : + // Nothing + } } - return (action && action != 'Menu'); + return action; } } diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js index 3ce0358b..c0cfa7e5 100644 --- a/client/components/Reader/versionHistory.js +++ b/client/components/Reader/versionHistory.js @@ -1,4 +1,21 @@ export const versionHistory = [ +{ + showUntil: '2019-11-10', + header: '0.7.7 (2019-11-06)', + content: +` +
    +
  • добавлены следующие жесты для тачскрина (только при включенной опции "управление кликом"):
  • +
      +
    • от центра вверх: на весь экран
    • +
    • от центра вниз: плавный скроллинг
    • +
    • от центра вправо: увеличить скорость скроллинга
    • +
    • от центра влево: уменьшить скорость скроллинга
    • +
    +
+` +}, + { showUntil: '2019-10-29', header: '0.7.6 (2019-10-30)',