Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
/* | |
* Real3D FlipBook [https://real3dflipbook.com] | |
* @author creativeinteractivemedia [https://codecanyon.net/user/creativeinteractivemedia/portfolio] | |
* @version 4.10 | |
* @date 2025-05-15 | |
*/ | |
; | |
var FLIPBOOK = FLIPBOOK || {}; | |
FLIPBOOK.BookSwipe = function (el, wrapper, main, options) { | |
this.options = options; | |
this.main = main; | |
this.singlePage = options.singlePageMode; | |
if (this.singlePage) { | |
this.view = 1; | |
} | |
this.pageWidth = this.options.pageWidth; | |
this.pageHeight = this.options.pageHeight; | |
this.slides = []; | |
this.pagesArr = []; | |
this.leftPage = 0; | |
this.rightPage = 0; | |
this.rotation = 0; | |
this.prevPageEnabled = false; | |
this.setRightIndex(options.rightToLeft ? options.pages.length : 0); | |
this.currentSlide = 0; | |
this.flipping = false; | |
this.wrapper = wrapper; | |
this.scroller = el; | |
this.scroller.classList.remove('book'); | |
this.scroller.classList.add('flipbook-carousel-scroller'); | |
this.iscroll = new IScroll(this.wrapper, { | |
snap: true, | |
snapSpeed: 200 * this.options.pageFlipDuration, | |
freeScroll: true, | |
scrollX: true, | |
scrollY: false, | |
preventDefault: false, | |
eventPassthrough: 'vertical', | |
}); | |
var self = this; | |
this.zoomDisabled = false; | |
this.iscroll.on('scrollStart', function () { | |
self.zoomDisabled = true; | |
}); | |
this.iscroll.on('scrollEnd', function () { | |
self.zoomDisabled = false; | |
}); | |
for (var i = 0; i < 3; i++) { | |
var slide = document.createElement('div'); | |
slide.className = 'flipbook-carousel-slide'; | |
var slideInner = document.createElement('div'); | |
slideInner.className = 'slide-inner'; | |
slide.appendChild(slideInner); | |
this.scroller.appendChild(slide); | |
this.slides.push(slide); | |
} | |
this.slides[0].iscroll = new IScroll(this.slides[0], { | |
zoom: true, | |
scrollX: true, | |
scrollY: true, | |
freeScroll: true, | |
keepInCenterV: true, | |
keepInCenterH: true, | |
preventDefault: false, | |
}); | |
this.slides[2].iscroll = new IScroll(this.slides[2], { | |
zoom: true, | |
scrollX: true, | |
scrollY: true, | |
freeScroll: true, | |
keepInCenterV: true, | |
keepInCenterH: true, | |
preventDefault: false, | |
}); | |
this.slides[1].iscroll = new IScroll(this.slides[1], { | |
zoom: true, | |
scrollX: true, | |
scrollY: true, | |
freeScroll: true, | |
keepInCenterV: true, | |
keepInCenterH: true, | |
preventDefault: false, | |
}); | |
// eslint-disable-next-line no-redeclare | |
for (var i = 0; i < 3; i++) { | |
this.slides[i].iscroll.on('zoomEnd', function () { | |
var scale = options.main.zoom; | |
this.options.eventPassthrough = scale > 1 ? '' : 'vertical'; | |
this.options.freeScroll = scale > 1; | |
this.refresh(); | |
}); | |
} | |
this.resizeInnerSlides(); | |
var page; | |
options.pages.forEach((page, index) => { | |
if (!page.empty) { | |
const newPage = new FLIPBOOK.PageSwipe(this, index, page.src, page.htmlContent); | |
this.pagesArr.push(newPage); | |
if (options.loadAllPages) { | |
newPage.load(); | |
} | |
} | |
}); | |
if (!options.cover) { | |
page = new FLIPBOOK.PageSwipe(this, options.numPages); | |
this.pagesArr.push(page); | |
} | |
this.iscroll.on('scrollStart', function () { | |
if (this.distX < 0) { | |
self.loadNextSpread(); | |
} else { | |
self.loadPrevSpread(); | |
} | |
}); | |
this.iscroll.on('scrollEnd', function () { | |
var sliderPage = this.currentPage.pageX; | |
if (self.currentSlide == sliderPage) { | |
return; | |
} | |
if (self.singlePage) { | |
if (sliderPage > self.currentSlide) { | |
self.setRightIndex(self.rightIndex + 1); | |
} else if (sliderPage < self.currentSlide) { | |
self.setRightIndex(self.rightIndex - 1); | |
} | |
} else { | |
if (sliderPage > self.currentSlide) { | |
self.setRightIndex(self.rightIndex + 2); | |
} else if (sliderPage < self.currentSlide) { | |
self.setRightIndex(self.rightIndex - 2); | |
} | |
} | |
self.currentSlide = sliderPage; | |
self.updateVisiblePages(); | |
self.flipping = false; | |
}); | |
this.flipEnabled = true; | |
this.nextEnabled = true; | |
this.prevEnabled = true; | |
main.on('enableIScroll', () => { | |
this.enableIscroll(); | |
}); | |
main.on('disableIScroll', () => { | |
this.disableIscroll(); | |
}); | |
main.on('pageLoaded', function (_) {}); | |
}; | |
FLIPBOOK.BookSwipe.prototype = Object.create(FLIPBOOK.Book.prototype); | |
FLIPBOOK.BookSwipe.prototype.constructor = FLIPBOOK.BookSwipe; | |
FLIPBOOK.BookSwipe.prototype.enableIscroll = function () { | |
if (this.iscrollDisabled) { | |
if (this.zoom > 1) { | |
if (this.slides[0].iscroll) { | |
this.slides[0].iscroll.enable(); | |
} | |
if (this.slides[1].iscroll) { | |
this.slides[1].iscroll.enable(); | |
} | |
if (this.slides[2].iscroll) { | |
this.slides[2].iscroll.enable(); | |
} | |
} else { | |
this.iscroll.enable(); | |
} | |
this.iscrollDisabled = false; | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.disableIscroll = function () { | |
if (!this.iscrollDisabled) { | |
if (this.zoom > 1) { | |
if (this.slides[0].iscroll) { | |
this.slides[0].iscroll.disable(); | |
this.slides[0].iscroll.initiated = false; | |
} | |
if (this.slides[1].iscroll) { | |
this.slides[1].iscroll.disable(); | |
this.slides[1].iscroll.initiated = false; | |
} | |
if (this.slides[2].iscroll) { | |
this.slides[2].iscroll.disable(); | |
this.slides[2].iscroll.initiated = false; | |
} | |
} else { | |
this.iscroll.disable(); | |
this.iscroll.initiated = false; | |
} | |
this.iscrollDisabled = true; | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.goToPage = function (value, instant) { | |
if (!this.enabled) { | |
return; | |
} | |
if (!this.flipEnabled) { | |
return; | |
} | |
if (value > this.options.pages.length) { | |
value = this.options.pages.length; | |
} | |
if (this.singlePage || value % 2 != 0) { | |
value--; | |
} | |
if (isNaN(value) || value < 0) { | |
value = 0; | |
} | |
if (instant) { | |
this.setRightIndex(value); | |
this.updateVisiblePages(); | |
return; | |
} | |
if (this.singlePage) { | |
if (value > this.rightIndex) { | |
this.setSlidePages(this.currentSlide + 1, [value]); | |
this.setRightIndex(value - 1); | |
this.nextPage(instant); | |
} else if (value < this.rightIndex) { | |
this.setSlidePages(this.currentSlide - 1, [value]); | |
this.setRightIndex(value + 1); | |
this.prevPage(instant); | |
} | |
} else { | |
if (this.options.rightToLeft && !this.options.backCover && value < 2) { | |
value = 2; | |
} | |
if (value > this.rightIndex) { | |
if (value >= this.pagesArr.length) { | |
this.setSlidePages(2, [value - 1, value]); | |
this.setRightIndex(value - 2); | |
this.goToSlide(2, instant); | |
} else { | |
this.setSlidePages(this.currentSlide + 1, [value - 1, value]); | |
this.setRightIndex(value - 2); | |
this.nextPage(instant); | |
} | |
} else if (value < this.rightIndex) { | |
if (value == 0) { | |
this.setRightIndex(value + 2); | |
this.setSlidePages(0, [value]); | |
this.goToSlide(0, instant); | |
} else { | |
this.setRightIndex(value + 2); | |
this.setSlidePages(this.currentSlide - 1, [value - 1, value]); | |
this.prevPage(instant); | |
} | |
} | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.setRightIndex = function (value) { | |
this.rightIndex = value; | |
}; | |
FLIPBOOK.BookSwipe.prototype.nextPage = function (instant) { | |
if (this.currentSlide == 2) { | |
return; | |
} | |
this.flipping = true; | |
this.goToSlide(this.currentSlide + 1, instant); | |
this.loadNextSpread(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.prevPage = function (instant) { | |
if (this.currentSlide == 0) { | |
return; | |
} | |
this.flipping = true; | |
this.goToSlide(this.currentSlide - 1, instant); | |
this.loadPrevSpread(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.enablePrev = function (val) { | |
this.prevEnabled = val; | |
}; | |
FLIPBOOK.BookSwipe.prototype.enableNext = function (val) { | |
this.nextEnabled = val; | |
}; | |
FLIPBOOK.BookSwipe.prototype.setSlidePages = function (slide, pages) { | |
var self = this; | |
var arr = []; | |
for (var i = 0; i < pages.length; i++) { | |
if (pages[i]) { | |
arr.push(pages[i].index); | |
} | |
} | |
if (this.slides[slide].pages && this.slides[slide].pages.length > 0) { | |
if (arr.join('') === this.slides[slide].pages.join('')) { | |
return; | |
} | |
} | |
this.clearSlidePages(slide); | |
var slideInner = this.slides[slide].firstChild; | |
pages.forEach((page) => { | |
let pageIndex; | |
if (typeof page === 'number') { | |
pageIndex = page; | |
} else { | |
pageIndex = page.index; | |
} | |
if (self.pagesArr[pageIndex]) { | |
slideInner.appendChild(self.pagesArr[pageIndex].wrapper); | |
self.slides[slide].pages.push(pageIndex); | |
} | |
}); | |
this.resizeInnerSlides(); | |
if (this.slides[slide].iscroll) { | |
this.slides[slide].iscroll.refresh(); | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.clearSlidePages = function (slide) { | |
this.slides[slide].firstChild.innerHTML = ''; | |
this.slides[slide].pages = []; | |
}; | |
FLIPBOOK.BookSwipe.prototype.loadNextSpread = function () { | |
var index = this.rightIndex; | |
if (this.options.rightToLeft && !this.options.backCover) { | |
index--; | |
} | |
var next = this.pagesArr[index + 1]; | |
if (next) { | |
next.load(); | |
} | |
if (!this.singlePage) { | |
var afterNext = this.pagesArr[index + 2]; | |
if (afterNext) { | |
afterNext.load(); | |
} | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.loadPrevSpread = function () { | |
var index = this.rightIndex; | |
var prev; | |
if (this.options.rightToLeft && !this.options.backCover) { | |
index--; | |
} | |
if (this.singlePage) { | |
prev = this.pagesArr[index - 1]; | |
if (prev) { | |
prev.load(); | |
} | |
} else { | |
prev = this.pagesArr[index - 2]; | |
if (prev) { | |
prev.load(); | |
} | |
var beforePrev = this.pagesArr[index - 3]; | |
if (beforePrev) { | |
beforePrev.load(); | |
} | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.loadVisiblePages = function () { | |
var main = this.options.main; | |
var index = this.rightIndex; | |
if (this.options.rightToLeft && !this.options.backCover && !this.singlePage) { | |
index--; | |
} | |
var right = this.pagesArr[index]; | |
var left = this.pagesArr[index - 1]; | |
var next = this.pagesArr[index + 1]; | |
var afterNext = this.pagesArr[index + 2]; | |
var prev = this.pagesArr[index - 2]; | |
var beforePrev = this.pagesArr[index - 3]; | |
if (this.singlePage) { | |
if (right) { | |
right.load(function () { | |
main.setLoadingProgress(1); | |
if (left) { | |
left.load(null, true); | |
} | |
if (next) { | |
next.load(null, true); | |
} | |
}); | |
} else if (left) { | |
left.load(); | |
} | |
} else { | |
if (left) { | |
left.load(function () { | |
if (right) { | |
right.load(function () { | |
main.setLoadingProgress(1); | |
if (prev) { | |
prev.load(null, true); | |
} | |
if (beforePrev) { | |
beforePrev.load(null, true); | |
} | |
if (next) { | |
next.load(null, true); | |
} | |
if (afterNext) { | |
afterNext.load(null, true); | |
} | |
}); | |
} else { | |
main.setLoadingProgress(1); | |
if (prev) { | |
prev.load(null, true); | |
} | |
if (beforePrev) { | |
beforePrev.load(null, true); | |
} | |
} | |
}); | |
} else { | |
if (right) { | |
right.load(function () { | |
main.setLoadingProgress(1); | |
if (next) { | |
next.load(null, true); | |
} | |
if (afterNext) { | |
afterNext.load(null, true); | |
} | |
}); | |
} | |
} | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.updateVisiblePages = function () { | |
if (this.visiblePagesRightIndex === this.rightIndex) { | |
return; | |
} | |
this.visiblePagesRightIndex = this.rightIndex; | |
var index = this.rightIndex; | |
if (this.options.rightToLeft && !this.options.backCover && !this.singlePage) { | |
index--; | |
} | |
var right = this.pagesArr[index]; | |
var left = this.pagesArr[index - 1]; | |
var next = this.pagesArr[index + 1]; | |
var afterNext = this.pagesArr[index + 2]; | |
var prev = this.pagesArr[index - 2]; | |
var beforePrev = this.pagesArr[index - 3]; | |
if (next) { | |
next.hideHTML(); | |
} | |
if (afterNext) { | |
afterNext.hideHTML(); | |
} | |
if (prev) { | |
prev.hideHTML(); | |
} | |
if (beforePrev) { | |
beforePrev.hideHTML(); | |
} | |
if (this.singlePage) { | |
if (right) { | |
right.startHTML(); | |
} | |
if (!left) { | |
//cover | |
this.setSlidePages(0, [right]); | |
if (next) { | |
this.setSlidePages(1, [next]); | |
} else { | |
this.clearSlidePages(1); | |
} | |
this.goToSlide(0, true); | |
this.clearSlidePages(2); | |
} else { | |
if (next) { | |
this.setSlidePages(1, [right]); | |
if (left) { | |
this.setSlidePages(0, [left]); | |
} | |
this.setSlidePages(2, [next]); | |
this.goToSlide(1, true); | |
} else { | |
if (right) { | |
this.setSlidePages(2, [right]); | |
} | |
if (left) { | |
this.setSlidePages(1, [left]); | |
} | |
this.goToSlide(2, true); | |
this.clearSlidePages(0); | |
} | |
} | |
if (left) { | |
left.hideHTML(); | |
} | |
} else { | |
if (!left) { | |
if (right) { | |
right.startHTML(); | |
} | |
//cover | |
this.setSlidePages(0, [right]); | |
if (afterNext) { | |
this.setSlidePages(1, [next, afterNext]); | |
} else { | |
this.setSlidePages(1, [next]); | |
} | |
this.goToSlide(0, true); | |
this.clearSlidePages(2); | |
} else { | |
left.startHTML(); | |
if (right) { | |
right.startHTML(); | |
//L R | |
if (!next) { | |
this.setSlidePages(2, [left, right]); | |
if (beforePrev) { | |
this.setSlidePages(1, [beforePrev, prev]); | |
} else { | |
this.setSlidePages(1, [prev]); | |
} | |
this.goToSlide(2, true); | |
this.clearSlidePages(0); | |
} else { | |
if (prev && !(this.rightIndex == 2 && !this.options.cover)) { | |
this.setSlidePages(1, [left, right]); | |
if (beforePrev) { | |
this.setSlidePages(0, [beforePrev, prev]); | |
} else { | |
this.setSlidePages(0, [prev]); | |
} | |
if (afterNext) { | |
this.setSlidePages(2, [next, afterNext]); | |
} else { | |
this.setSlidePages(2, [next]); | |
} | |
this.goToSlide(1, true); | |
} else { | |
this.setSlidePages(0, [left, right]); | |
if (afterNext) { | |
this.setSlidePages(1, [next, afterNext]); | |
} else { | |
this.setSlidePages(1, [next]); | |
} | |
this.clearSlidePages(2); | |
} | |
} | |
} else { | |
this.setSlidePages(2, [left]); | |
if (beforePrev) { | |
this.setSlidePages(1, [beforePrev, prev]); | |
} else { | |
this.setSlidePages(1, [prev]); | |
} | |
this.goToSlide(2, true); | |
this.clearSlidePages(0); | |
} | |
} | |
} | |
this.loadVisiblePages(); | |
this.flippedleft = (this.rightIndex + (this.rightIndex % 2)) / 2; | |
this.flippedright = this.options.pages.length / 2 - this.flippedleft; | |
this.options.main.turnPageComplete(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.loadPage = function (index) { | |
if (this.pagesArr[index]) { | |
this.pagesArr[index].load(); | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.disable = function () { | |
this.enabled = false; | |
}; | |
FLIPBOOK.BookSwipe.prototype.enable = function () { | |
this.enabled = true; | |
this.onResize(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.resize = function () {}; | |
FLIPBOOK.BookSwipe.prototype.updateSinglePage = function (singlePage) { | |
this.singlePageView = singlePage; | |
this.onResize(true); | |
}; | |
FLIPBOOK.BookSwipe.prototype.onResize = function (force) { | |
var w = this.main.wrapperW; | |
var h = this.main.wrapperH; | |
if (w == 0 || h == 0) { | |
return; | |
} | |
if (!force && this.w === w && this.h === h) { | |
return; | |
} | |
this.w = w; | |
this.h = h; | |
var pw = this.pageWidth; | |
var ph = this.pageHeight; | |
var portrait = (2 * this.options.zoomMin * pw) / ph > w / h; | |
var doublePage = | |
!this.options.singlePageMode && | |
(!this.options.responsiveView || | |
w > this.options.responsiveViewTreshold || | |
!portrait || | |
w / h >= this.options.responsiveViewRatio); | |
if (typeof this.singlePageView != 'undefined') { | |
doublePage = !this.singlePageView; | |
} | |
var bw = doublePage ? 2 * pw : pw; | |
var bh = ph; | |
this.bw = bw; | |
this.bh = bh; | |
var scale; | |
if (h / w > bh / bw) { | |
//fit to width | |
scale = ((bh / bw) * w) / this.options.pageHeight; | |
} else { | |
scale = h / this.options.pageHeight; | |
} | |
var spaceBetweenSlides = 0; | |
for (var i = 0; i < this.slides.length; i++) { | |
this.slides[i].style.width = w + spaceBetweenSlides + 'px'; | |
this.slides[i].style.height = h + 'px'; | |
this.slides[i].style.left = i * w + i * spaceBetweenSlides + 'px'; | |
if (this.slides[i].iscroll) { | |
this.slides[i].iscroll.options.zoomMin = this.options.zoomMin * scale; | |
this.slides[i].iscroll.options.zoomMax = this.options.zoomMax * scale; | |
this.slides[i].iscroll.refresh(); | |
} | |
} | |
this.scroller.style.width = this.slides.length * (w + spaceBetweenSlides) + 'px'; | |
this.iscroll.refresh(); | |
if ((!doublePage || this.options.singlePageMode) && !this.singlePage) { | |
if (this.rightIndex % 2 == 0 && this.rightIndex > 0) { | |
this.setRightIndex(this.rightIndex - 1); | |
} | |
this.singlePage = true; | |
this.view = 1; | |
this.resizeInnerSlides(); | |
} else if (doublePage && !this.options.singlePageMode && this.singlePage) { | |
if (this.rightIndex % 2 != 0) { | |
this.setRightIndex(this.rightIndex + 1); | |
} | |
this.singlePage = false; | |
this.view = 2; | |
this.resizeInnerSlides(); | |
} | |
this.zoomTo(this.zoom); | |
// this.updateVisiblePages(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.isFocusedRight = function () { | |
return this.rightIndex % 2 == 0; | |
}; | |
FLIPBOOK.BookSwipe.prototype.isFocusedLeft = function () { | |
return this.rightIndex % 2 == 1; | |
}; | |
FLIPBOOK.BookSwipe.prototype.resizeInnerSlides = function () { | |
var pw = (this.options.pageHeight * this.pageWidth) / this.pageHeight; | |
if (this.rotation == 90 || this.rotation == 270) { | |
pw = (this.options.pageHeight * this.pageHeight) / this.pageWidth; | |
} | |
var sw = this.singlePage ? pw : 2 * pw; | |
for (var i = 0; i < 3; i++) { | |
sw = this.slides[i].pages && this.slides[i].pages.length == 1 ? pw : 2 * pw; | |
this.slides[i].firstChild.style.width = `${sw}px`; | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.goToSlide = function (slideIndex, instant) { | |
if (this.iscroll.currentPage.pageX == slideIndex) { | |
return; | |
} | |
this.onResize(); | |
var time = instant ? 0 : 600 * this.options.pageFlipDuration; | |
var slide = this.slides[slideIndex]; | |
if (slide.pages && slide.pages[0]) { | |
this.pagesArr[slide.pages[0]].updateHtmlContent(); | |
} | |
if (this.iscroll.pages.length > 0) { | |
this.iscroll.goToPage(slideIndex, 0, time); | |
} | |
if (instant) { | |
this.currentSlide = slideIndex; | |
} | |
this.zoomTo(this.options.zoomMin); | |
}; | |
FLIPBOOK.BookSwipe.prototype.zoomIn = function (value, time, e) { | |
if (e && e.type === 'mousewheel') { | |
return; | |
} | |
this.zoomTo(value); | |
}; | |
FLIPBOOK.BookSwipe.prototype.zoomTo = function (zoom, time, x, y) { | |
if (!this.enabled || this.zoomDisabled) { | |
return; | |
} | |
x = x || 0; | |
y = y || 0; | |
if (zoom > 1) { | |
this.disableFlip(); | |
} | |
if (w == 0 || h == 0) { | |
return; | |
} | |
var m = this.main; | |
var w = m.wrapperW; | |
var h = m.wrapperH; | |
var bw = m.bookW; | |
var bh = m.bookH; | |
var pw = m.pageW; | |
var ph = m.pageH; | |
var r1 = w / h; | |
var r2 = pw / ph; | |
var s = Math.min(this.zoom, 1); | |
var zoomMin = Number(this.options.zoomMin); | |
var self = this; | |
function fitToHeight() { | |
self.ratio = h / bh; | |
fit(); | |
} | |
function fitToWidth() { | |
self.ratio = self.view == 1 ? w / pw : w / bw; | |
fit(); | |
} | |
function fit() { | |
for (var i = 0; i < 3; i++) { | |
if (self.slides[i].iscroll) { | |
self.slides[i].iscroll.options.zoomMin = self.ratio * self.options.zoomMin; | |
self.slides[i].iscroll.options.zoomMax = self.ratio * self.options.zoomMax; | |
self.slides[i].iscroll.zoom(self.ratio * zoom, x, y, 0); | |
} | |
} | |
} | |
if ( | |
!this.options.singlePageMode && | |
this.options.responsiveView && | |
w <= this.options.responsiveViewTreshold && | |
r1 < 2 * r2 && | |
r1 < this.options.responsiveViewRatio | |
) { | |
this.view = 1; | |
if (r2 > r1) { | |
this.sc = (zoomMin * r1) / (r2 * s); | |
} else { | |
this.sc = 1; | |
} | |
if (w / h > pw / ph) { | |
fitToHeight(); | |
} else { | |
fitToWidth(); | |
} | |
} else if (this.singlePage && r1 < 2 * r2) { | |
if (r2 > r1) { | |
this.sc = (zoomMin * r1) / (r2 * s); | |
} else { | |
this.sc = 1; | |
} | |
if (w / h > pw / ph) { | |
fitToHeight(); | |
} else { | |
fitToWidth(); | |
} | |
} else { | |
this.view = 2; | |
if (r1 < 2 * r2) { | |
this.sc = (zoomMin * r1) / (2 * r2 * s); | |
} else { | |
this.sc = 1; | |
} | |
if (w / h >= bw / bh) { | |
fitToHeight(); | |
} else { | |
fitToWidth(); | |
} | |
} | |
this.zoom = zoom; | |
this.onZoom(zoom); | |
}; | |
FLIPBOOK.BookSwipe.prototype.zoomOut = function (value) { | |
this.zoomTo(value); | |
}; | |
FLIPBOOK.BookSwipe.prototype.move = function (direction) { | |
if (this.zoom <= 1) { | |
return; | |
} | |
for (var i = 0; i < 3; i++) { | |
var iscroll = this.slides[i].iscroll; | |
var offset2 = 0; | |
if (iscroll) { | |
var posX = iscroll.x; | |
var posY = iscroll.y; | |
var offset = 20 * this.zoom; | |
switch (direction) { | |
case 'left': | |
posX += offset; | |
break; | |
case 'right': | |
posX -= offset; | |
break; | |
case 'up': | |
posY += offset; | |
break; | |
case 'down': | |
posY -= offset; | |
break; | |
} | |
if (posX > 0) { | |
posX = offset2; | |
} | |
if (posX < iscroll.maxScrollX) { | |
posX = iscroll.maxScrollX - offset2; | |
} | |
if (posY > 0) { | |
posY = offset2; | |
} | |
if (posY < iscroll.maxScrollY) { | |
posY = iscroll.maxScrollY - offset2; | |
} | |
iscroll.scrollTo(posX, posY, 0); | |
} | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.onZoom = function (zoom) { | |
if (zoom > 1) { | |
this.disableFlip(); | |
this.enablePan(); | |
} else { | |
this.enableFlip(); | |
this.disablePan(); | |
} | |
this.options.main.onZoom(zoom); | |
}; | |
FLIPBOOK.BookSwipe.prototype.rotateLeft = function () { | |
this.rotation = (this.rotation + 360 - 90) % 360; | |
for (var i = 0; i < this.pagesArr.length; i++) { | |
var page = this.pagesArr[i]; | |
page.setRotation(this.rotation); | |
} | |
this.resizeInnerSlides(); | |
this.onResize(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.rotateRight = function () { | |
this.rotation = (this.rotation + 360 + 90) % 360; | |
for (var i = 0; i < this.pagesArr.length; i++) { | |
var page = this.pagesArr[i]; | |
page.setRotation(this.rotation); | |
} | |
this.resizeInnerSlides(); | |
this.onResize(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.onSwipe = function (event, phase, distanceX, distanceY) { | |
if (phase == 'start') { | |
return; | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.onPageUnloaded = function (i) { | |
var index = this.options.rightToLeft ? this.options.numPages - i - 1 : i; | |
this.pagesArr[index].unload(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.disableFlip = function () { | |
this.flipEnabled = false; | |
this.iscroll.disable(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.enableFlip = function () { | |
if (this.options.numPages == 1) { | |
this.disableFlip(); | |
return; | |
} | |
this.flipEnabled = true; | |
this.iscroll.enable(); | |
}; | |
FLIPBOOK.BookSwipe.prototype.enablePan = function () { | |
if (this.slides[0].iscroll) { | |
this.slides[0].iscroll.enable(); | |
} | |
if (this.slides[1].iscroll) { | |
this.slides[1].iscroll.enable(); | |
} | |
if (this.slides[2].iscroll) { | |
this.slides[2].iscroll.enable(); | |
} | |
}; | |
FLIPBOOK.BookSwipe.prototype.disablePan = function () { | |
if (this.slides[0].iscroll) { | |
this.slides[0].iscroll.disable(); | |
} | |
if (this.slides[1].iscroll) { | |
this.slides[1].iscroll.disable(); | |
} | |
if (this.slides[2].iscroll) { | |
this.slides[2].iscroll.disable(); | |
} | |
}; | |
FLIPBOOK.PageSwipe = function (book, index, texture, html) { | |
this.rotation = 0; | |
this.index = index; | |
this.options = book.options; | |
this.texture = texture; | |
this.html = html; | |
this.index = index; | |
this.wrapper = document.createElement('div'); | |
this.wrapper.classList.add('flipbook-carousel-page'); | |
this.wrapper.dataset.page = index + 1; | |
this.main = book.main; | |
this.book = book; | |
this.inner = document.createElement('div'); | |
this.inner.classList.add('flipbook-carousel-page-inner'); | |
this.wrapper.appendChild(this.inner); | |
this.bg = document.createElement('div'); | |
this.bg.classList.add('flipbook-carousel-page-bg'); | |
this.inner.appendChild(this.bg); | |
this.htmlElement = document.createElement('div'); | |
this.htmlElement.classList.add('flipbook-page3-html'); | |
this.htmlElement.style.width = (1000 * this.options.pageWidth) / this.options.pageHeight + 'px'; | |
this.htmlElement.style.transform = 'scale(' + this.options.pageHeight / 1000 + ') translateZ(0)'; | |
this.inner.appendChild(this.htmlElement); | |
if (this.options.doublePage) { | |
if (!this.options.rightToLeft && this.index % 2 === 0 && this.index > 0) { | |
this.htmlElement.style.left = '-100%'; | |
} else if (this.options.rightToLeft && this.index % 2 === 1 && this.index > 0) { | |
this.htmlElement.style.left = '-100%'; | |
} else { | |
this.htmlElement.style.left = '0'; | |
} | |
} | |
if (this.options.pagePreloader) { | |
this.preloader = document.createElement('img'); | |
this.preloader.src = this.options.pagePreloader; | |
this.preloader.classList.add('flipbook-page-preloader-image'); | |
this.inner.appendChild(this.preloader); | |
} else { | |
this.preloader = document.createElement('img'); | |
this.preloader.src = this.options.assets.spinner; | |
this.preloader.classList.add('flipbook-page-preloader'); | |
this.inner.appendChild(this.preloader); | |
} | |
this.setSize(this.pw, this.ph); | |
}; | |
FLIPBOOK.PageSwipe.prototype = { | |
load: function (callback, thumb) { | |
var size = this.options.pageTextureSize; | |
if (this.size >= size) { | |
if (!thumb) { | |
this.loadHTML(); | |
} | |
if (callback) { | |
callback.call(this); | |
} | |
return; | |
} | |
this.size = size; | |
var self = this; | |
var index = this.options.rightToLeft ? this.options.numPages - this.index - 1 : this.index; | |
var o = this.options; | |
var p = o.pages[index]; | |
this.options.main.loadPage(index, size, function (page) { | |
page = page || {}; | |
if (page && page.image) { | |
var img = page.image[size] || page.image; | |
img.classList.add('page-carousel-img'); | |
if (self.index % 2 == 0 && ((p && p.side == 'left') || (p && p.side == 'right'))) { | |
if (!img.clone) { | |
img.clone = new Image(); | |
img.clone.src = img.src; | |
} | |
img = img.clone; | |
} | |
self.bg.appendChild(img); | |
if (self.options.rightToLeft) { | |
if (self.options.doublePage && self.index < self.options.numPages - 1 && self.index % 2 == 1) { | |
img.style.left = '-100%'; | |
} | |
if (self.options.doublePage) { | |
if (self.index == self.options.numPages - 1 || (self.index == 0 && self.options.backCover)) { | |
img.style.width = '100%'; | |
} else { | |
img.style.width = '200%'; | |
} | |
} else { | |
img.style.width = '100%'; | |
} | |
} else { | |
if (self.options.doublePage && self.index > 0 && self.index % 2 == 0) { | |
img.style.left = '-100%'; | |
} | |
if (self.options.doublePage) { | |
if (self.index == 0 || (self.index == self.options.numPages - 1 && self.options.backCover)) { | |
img.style.width = '100%'; | |
} else { | |
img.style.width = '200%'; | |
} | |
} else { | |
img.style.width = '100%'; | |
} | |
} | |
self.preloader.remove(); | |
} | |
self.setRotation(); | |
if (!thumb) { | |
self.loadHTML(); | |
} | |
if (callback) { | |
callback.call(self); | |
} | |
}); | |
}, | |
loadHTML: function () { | |
var self = this; | |
var index = !this.options.rightToLeft ? this.index : this.options.numPages - this.index - 1; | |
if (this.htmlContent) { | |
this.updateHtmlContent(); | |
} else { | |
this.options.main.loadPageHTML(index, function (html) { | |
self.htmlContent = html; | |
self.updateHtmlContent(); | |
}); | |
} | |
}, | |
hideHTML: function () { | |
if (this.htmlContentVisible) { | |
this.htmlElement.innerHTML = ''; | |
this.htmlContentVisible = false; | |
this.main.trigger('hidepagehtml', { page: this }); | |
} | |
}, | |
startHTML: function () { | |
this.book.startPageItems(this.wrapper); | |
}, | |
unload: function () { | |
this.pageSize = 0; | |
this.size = 0; | |
this.inner.appendChild(this.preloader); | |
}, | |
dispose: function () { | |
if (this.pageSize) { | |
this.pageSize = null; | |
this.bg.innerHTML = ''; | |
} | |
}, | |
setSize: function () { | |
var w = this.options.pageWidth; | |
var h = this.options.pageHeight; | |
if (this.rotation === 0 || this.rotation === 180) { | |
this.wrapper.style.width = w + 'px'; | |
this.wrapper.style.height = h + 'px'; | |
this.pw = w; | |
this.ph = h; | |
} else { | |
this.wrapper.style.width = h + 'px'; | |
this.wrapper.style.height = w + 'px'; | |
this.pw = h; | |
this.ph = w; | |
} | |
this.updateHtmlContent(); | |
}, | |
setRotation: function (val) { | |
this.setSize(); | |
if (this.options.doublePage) { | |
return; | |
} | |
if (typeof val != 'undefined') { | |
this.rotation = val; | |
} | |
if (this.img) { | |
this.img.style.transform = 'rotate(' + this.rotation + 'deg) translateZ(0)'; | |
if (this.rotation === 90 || this.rotation === 270) { | |
this.img.style.width = this.wrapper.clientHeight + 'px'; | |
this.img.style.height = this.wrapper.clientWidth + 'px'; | |
} else { | |
this.img.style.width = this.wrapper.clientWidth + 'px'; | |
this.img.style.height = this.wrapper.clientHeight + 'px'; | |
} | |
} | |
}, | |
updateHtmlContent: function () { | |
var c = this.htmlContent; | |
if (c && !this.htmlContentVisible) { | |
this.htmlContentVisible = true; | |
this.htmlElement.innerHTML = ''; | |
this.htmlElement.appendChild(this.htmlContent); | |
this.main.trigger('showpagehtml', { page: this }); | |
} | |
this.startHTML(); | |
}, | |
}; | |