From 1cbeb666efeaba161be3c37c863cb6268194e400 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 5 Dec 2018 14:52:12 +0100 Subject: [PATCH] fix #2399 @.5 --- js/libs/fluidbook/fluidbook.3dflip.js | 3 + .../fluidbook/fluidbook.pagetransitions.js | 59 +++++++++++++++---- js/libs/fluidbook/fluidbook.sound.js | 15 ++++- 3 files changed, 62 insertions(+), 15 deletions(-) diff --git a/js/libs/fluidbook/fluidbook.3dflip.js b/js/libs/fluidbook/fluidbook.3dflip.js index d5d3588e..ade91cb4 100644 --- a/js/libs/fluidbook/fluidbook.3dflip.js +++ b/js/libs/fluidbook/fluidbook.3dflip.js @@ -108,6 +108,9 @@ Fluidbook3DFlip.prototype = { this.triangles = 5; } + // #2399 + this.animationTime = Math.max(0.4, this.animationTime); + if (performanceMode === 'performancesTest') { this.qualityRatio = Math.min(.75, this.qualityRatio); this.triangles = Math.min(2, this.triangles); diff --git a/js/libs/fluidbook/fluidbook.pagetransitions.js b/js/libs/fluidbook/fluidbook.pagetransitions.js index b38a64d7..f5726912 100644 --- a/js/libs/fluidbook/fluidbook.pagetransitions.js +++ b/js/libs/fluidbook/fluidbook.pagetransitions.js @@ -11,6 +11,46 @@ FluidbookPageTransition.prototype = { } }, + normalizeTransitionPageNr: function (pageNr) { + if (pageNr == undefined) { + pageNr = this.fluidbook.currentPage; + if (pageNr == -1) { + pageNr = 1; + } + } + return this.fluidbook.normalizePage(pageNr); + }, + + getTransitionDuration: function (pageNr) { + var type = this.getTransitionType(pageNr); + if (type === 'immediate') { + return 0; + } else if (type === 'flip3d') { + return this.flip3d.animationTime; + } else { + return parseFloat(this.fluidbook.datas.mobileTransitionDuration); + } + }, + + getTransitionType: function (pageNr) { + pageNr = this.normalizeTransitionPageNr(pageNr); + + if (pageNr === this.fluidbook.normalizePage(this.fluidbook.currentPage) || + this.fluidbook.currentPage === -1 || + !this.fluidbook.support.transitions2d || + this.fluidbook.datas.mobileTransitions === 'none') { + return "immediate"; + } else if (this.fluidbook.displayOnePage) { + return 'portrait'; + } else if ((!this.fluidbook.support.transitions3d && !this.fluidbook.support.transitions3dacc) || this.fluidbook.datas.mobileTransitions === 'slide') { + return 'slide'; + } else if (this.fluidbook.support.transitions3dacc && this.fluidbook.datas.mobileTransitions === 'flip3d') { + return 'flip3d'; + } else { + return 'flipcss'; + } + }, + pageTransition: function (pageNr) { var $this = this; if (this.fluidbook.pad.enabled) { @@ -22,36 +62,31 @@ FluidbookPageTransition.prototype = { $(this.fluidbook).trigger('fluidbook.beforePageTransition'); this.fluidbook.tooltip.hideTooltip(); + pageNr = this.normalizeTransitionPageNr(pageNr); + var transitionType = this.getTransitionType(pageNr); - if (pageNr == undefined) { - pageNr = this.fluidbook.currentPage; - if (pageNr == -1) { - pageNr = 1; - } - } - pageNr = this.fluidbook.normalizePage(pageNr); - if (this.fluidbook.firstTransition || pageNr === this.fluidbook.normalizePage(this.fluidbook.currentPage) || this.fluidbook.currentPage === -1 || !this.fluidbook.support.transitions2d || this.fluidbook.datas.mobileTransitions == 'none') { + if (this.fluidbook.firstTransition || transitionType === 'immediate') { this.fluidbook.firstTransition = false; this.fluidbook.zoom.resetZoom(); return this.pageTransition1D(pageNr); } - if (this.fluidbook.displayOnePage) { + if (transitionType === 'portrait') { this.fluidbook.zoom.resetZoom(); return this.pageTransition2DPortrait(pageNr); } - if ((!this.fluidbook.support.transitions3d && !this.fluidbook.support.transitions3dacc) || this.fluidbook.datas.mobileTransitions === 'slide') { + if (transitionType === 'slide') { this.fluidbook.zoom.resetZoom(); return this.pageTransition2D(pageNr); } - if (this.fluidbook.support.transitions3dacc && this.fluidbook.datas.mobileTransitions === 'flip3d') { + if (transitionType === 'flip3d') { this.fluidbook.zoom.resetZoom(function () { return $this.pageTransition3DFlip(pageNr); }); return true; - } else { + } else if (transitionType === 'flipcss') { this.fluidbook.zoom.resetZoom(); return this.pageTransition3D(pageNr); } diff --git a/js/libs/fluidbook/fluidbook.sound.js b/js/libs/fluidbook/fluidbook.sound.js index e24fa049..94c8a16d 100644 --- a/js/libs/fluidbook/fluidbook.sound.js +++ b/js/libs/fluidbook/fluidbook.sound.js @@ -91,7 +91,6 @@ FluidbookSound.prototype = { return; } - var page = data.page; if (page % 2 === 1) { page--; @@ -109,12 +108,22 @@ FluidbookSound.prototype = { sound = 'page-flip-' + (Math.round(Math.random() + 1)); } + var transitionDuration = this.fluidbook.pagetransitions.getTransitionDuration(page); + if (transitionDuration === 0) { + return; + } + + var seek = 0; + if (transitionDuration < 0.6) { + seek = 0.6 - transitionDuration; + } + try { this.audios[sound].volume = 1; if (this.audios[sound].fastSeek !== undefined) { - this.audios[sound].fastSeek(0); + this.audios[sound].fastSeek(seek); } else { - this.audios[sound].currentTime = 0; + this.audios[sound].currentTime = seek; } this.audios[sound].play(); } catch (e) { -- 2.39.5