]> _ Git - fluidbook-html5.git/commitdiff
fix #2399 @.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 5 Dec 2018 13:52:12 +0000 (14:52 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 5 Dec 2018 13:52:12 +0000 (14:52 +0100)
js/libs/fluidbook/fluidbook.3dflip.js
js/libs/fluidbook/fluidbook.pagetransitions.js
js/libs/fluidbook/fluidbook.sound.js

index d5d3588e1fc055a4a50514450d2a40dbb1533618..ade91cb4ece0a9c520afb8f751dc7f6a3043f950 100644 (file)
@@ -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);
index b38a64d799cf098f88ed3f16c7fcfecda237b888..f5726912719b74e9c8ddc22d8732c30cb7208604 100644 (file)
@@ -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);
         }
index e24fa049ab60c86f3f8c946bc8b38e0fe918e7f1..94c8a16de665f39a3abe4d10a8d2e82eeb69ec92 100644 (file)
@@ -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) {