Introduce jq into vue and use turnjs to achieve page turning effect (dynamic background-image)

To use turnjs, you need to use jq, and jq needs to be set up in webpack, so you can directly import the jq source code file, but the npm of turn cannot be downloaded, and the source code file import has no effect, so it is directly written in the method, which is a little less readable.

Entering the page will automatically turn one page first

Full code example:

<template>
	<div class="boxbox" style="background-color: pink;">
		<div id="flipbook" >
			<div class="hard top"  :style="`background-image:url(${url1});`"></div>
			<div class="hard top1"  :style="`background-image:url(${url2});`"></div>
			<div class="hard"  :style="`background:url(${url3}) no-repeat; background-position:center;
	background-size: 100%;`"></div>
			<div class="hard"  :style="`background-image:url(${url4});`">
				<div>
					<img src="./../assets/a.jpg" alt="" style="height:60px;width:55px">
				</div>
				<div>
					<span>姓名:</span>
					<span>章节</span>
				</div>
			</div>
			<div class="hard" :style="`background-image:url(${url5});`"></div>
			<div class="hard" :style="`background-image:url(${url4});`"></div>
			<div class="hard" :style="`background-image:url(${url6});`"></div>
			<div class="hard" :style="`background-image:url(${url7});`"></div>
		</div>
		<div>居中</div>
	</div>
</template>

<script>
import '../utils/jquery.js'
import '../utils/jquery.address-1.6.min.js'
import '../utils/jquery.fullscreen.js'
export default {
	name: 'HelloWorld',
	props: {
	},
	data(){
		return{
			url1:require('./../assets/1.png'),
			url2:require('./../assets/2.png'),
			url3:require('./../assets/3.png'),
			url4:require('./../assets/4.png'),
			url5:require('./../assets/5.png'),
			url6:require('./../assets/6.png'),
			url7:require('./../assets/7.png'),
		}
	},
	mounted() {
		this.$nextTick(() => {
			this.aa()
			$("#flipbook").turn("next")
			$("#flipbook").turn({
				width: 400,
				height: 275,
				autoCenter: true
			});
			$("#flipbook").turn("page",2)
		});
	},
	methods: {
		aa() {

			(function ($) {

				'use strict';

				var has3d,

					vendor = '',

					PI = Math.PI,

					A90 = PI / 2,

					isTouch = 'ontouchstart' in window,

					events = (isTouch) ? { start: 'touchstart', move: 'touchmove', end: 'touchend' }
						: { start: 'mousedown', move: 'mousemove', end: 'mouseup' },

					// Contansts used for each corner
					// tl * tr
					// *     *
					// bl * br

					corners = {
						backward: ['bl', 'tl'],
						forward: ['br', 'tr'],
						all: ['tl', 'bl', 'tr', 'br']
					},

					displays = ['single', 'double'],

					// Default options

					turnOptions = {

						// First page

						page: 1,

						// Enables gradients

						gradients: true,

						// Duration of transition in milliseconds

						duration: 600,

						// Enables hardware acceleration

						acceleration: true,

						// Display

						display: 'double',

						// Events

						when: null
					},

					flipOptions = {

						// Back page

						folding: null,

						// Corners
						// backward: Activates both tl and bl corners
						// forward: Activates both tr and br corners
						// all: Activates all the corners

						corners: 'forward',

						// Size of the active zone of each corner

						cornerSize: 100,

						// Enables gradients

						gradients: true,

						// Duration of transition in milliseconds

						duration: 600,

						// Enables hardware acceleration

						acceleration: true
					},

					// Number of pages in the DOM, minimum value: 6

					pagesInDOM = 6,

					pagePosition = {
						0: { top: 0, left: 0, right: 'auto', bottom: 'auto' },
						1: { top: 0, right: 0, left: 'auto', bottom: 'auto' }
					},

					// Gets basic attributes for a layer

					divAtt = function (top, left, zIndex, overf) {
						return {
							'css': {
								position: 'absolute',
								top: top,
								left: left,
								'overflow': overf || 'hidden',
								'z-index': zIndex || 'auto'
							}
						};
					},

					// Gets a 2D point from a bezier curve of four points

					bezier = function (p1, p2, p3, p4, t) {
						var mum1 = 1 - t,
							mum13 = mum1 * mum1 * mum1,
							mu3 = t * t * t;

						return point2D(Math.round(mum13 * p1.x + 3 * t * mum1 * mum1 * p2.x + 3 * t * t * mum1 * p3.x + mu3 * p4.x),
							Math.round(mum13 * p1.y + 3 * t * mum1 * mum1 * p2.y + 3 * t * t * mum1 * p3.y + mu3 * p4.y));
					},

					// Converts an angle from degrees to radians

					rad = function (degrees) {
						return degrees / 180 * PI;
					},

					// Converts an angle from radians to degrees

					deg = function (radians) {
						return radians / PI * 180;
					},

					// Gets a 2D point

					point2D = function (x, y) {
						return { x: x, y: y };
					},

					// Returns the traslate value

					translate = function (x, y, use3d) {
						return (has3d && use3d) ? ' translate3d(' + x + 'px,' + y + 'px, 0px) ' : ' translate(' + x + 'px, ' + y + 'px) ';
					},

					// Returns the rotation value

					rotate = function (degrees) {
						return ' rotate(' + degrees + 'deg) ';
					},

					// Checks if a property belongs to an object

					has = function (property, object) {
						return Object.prototype.hasOwnProperty.call(object, property);
					},

					// Gets the CSS3 vendor prefix

					getPrefix = function () {
						var vendorPrefixes = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'],
							len = vendorPrefixes.length,
							vendor = '';

						while (len--)
							if ((vendorPrefixes[len] + 'Transform') in document.body.style)
								vendor = '-' + vendorPrefixes[len].toLowerCase() + '-';

						return vendor;
					},

					// Adds gradients

					gradient = function (obj, p0, p1, colors, numColors) {

						var j, cols = [];

						if (vendor == '-webkit-') {

							for (j = 0; j < numColors; j++)
								cols.push('color-stop(' + colors[j][0] + ', ' + colors[j][1] + ')');

							obj.css({ 'background-image': '-webkit-gradient(linear, ' + p0.x + '% ' + p0.y + '%,  ' + p1.x + '% ' + p1.y + '%, ' + cols.join(',') + ' )' });

						} else {

							// This procedure makes the gradients for non-webkit browsers
							// It will be reduced to one unique way for gradients in next versions

							p0 = { x: p0.x / 100 * obj.width(), y: p0.y / 100 * obj.height() };
							p1 = { x: p1.x / 100 * obj.width(), y: p1.y / 100 * obj.height() };

							var dx = p1.x - p0.x,
								dy = p1.y - p0.y,
								angle = Math.atan2(dy, dx),
								angle2 = angle - Math.PI / 2,
								diagonal = Math.abs(obj.width() * Math.sin(angle2)) + Math.abs(obj.height() * Math.cos(angle2)),
								gradientDiagonal = Math.sqrt(dy * dy + dx * dx),
								corner = point2D((p1.x < p0.x) ? obj.width() : 0, (p1.y < p0.y) ? obj.height() : 0),
								slope = Math.tan(angle),
								inverse = -1 / slope,
								x = (inverse * corner.x - corner.y - slope * p0.x + p0.y) / (inverse - slope),
								c = { x: x, y: inverse * x - inverse * corner.x + corner.y },
								segA = (Math.sqrt(Math.pow(c.x - p0.x, 2) + Math.pow(c.y - p0.y, 2)));

							for (j = 0; j < numColors; j++)
								cols.push(' ' + colors[j][1] + ' ' + ((segA + gradientDiagonal * colors[j][0]) * 100 / diagonal) + '%');

							obj.css({ 'background-image': vendor + 'linear-gradient(' + (-angle) + 'rad,' + cols.join(',') + ')' });
						}
					},

					turnMethods = {

						// Singleton constructor
						// $('#selector').turn([options]);

						init: function (opts) {

							// Define constants
							if (has3d === undefined) {
								has3d = 'WebKitCSSMatrix' in window || 'MozPerspective' in document.body.style;
								vendor = getPrefix();
							}

							var i, data = this.data(), ch = this.children();

							opts = $.extend({ width: this.width(), height: this.height() }, turnOptions, opts);
							data.opts = opts;
							data.pageObjs = {};
							data.pages = {};
							data.pageWrap = {};
							data.pagePlace = {};
							data.pageMv = [];
							data.totalPages = opts.pages || 0;

							if (opts.when)
								for (i in opts.when)
									if (has(i, opts.when))
										this.bind(i, opts.when[i]);


							this.css({ position: 'relative', width: opts.width, height: opts.height });

							this.turn('display', opts.display);

							if (has3d && !isTouch && opts.acceleration)
								this.transform(translate(0, 0, true));

							for (i = 0; i < ch.length; i++)
								this.turn('addPage', ch[i], i + 1);

							this.turn('page', opts.page);

							// allow setting active corners as an option
							corners = $.extend({}, corners, opts.corners);

							// Event listeners

							$(this).bind(events.start, function (e) {
								for (var page in data.pages)
									if (has(page, data.pages) && flipMethods._eventStart.call(data.pages[page], e) === false)
										return false;
							});

							$(document).bind(events.move, function (e) {
								for (var page in data.pages)
									if (has(page, data.pages))
										flipMethods._eventMove.call(data.pages[page], e);
							}).
								bind(events.end, function (e) {
									for (var page in data.pages)
										if (has(page, data.pages))
											flipMethods._eventEnd.call(data.pages[page], e);

								});

							data.done = true;

							return this;
						},

						// Adds a page from external data

						addPage: function (element, page) {

							var incPages = false,
								data = this.data(),
								lastPage = data.totalPages + 1;

							if (page) {
								if (page == lastPage) {
									page = lastPage;
									incPages = true;
								} else if (page > lastPage)
									throw new Error('It is impossible to add the page "' + page + '", the maximum value is: "' + lastPage + '"');

							} else {
								page = lastPage;
								incPages = true;
							}

							if (page >= 1 && page <= lastPage) {

								// Stop animations
								if (data.done) this.turn('stop');

								// Move pages if it's necessary
								if (page in data.pageObjs)
									turnMethods._movePages.call(this, page, 1);

								// Update number of pages
								if (incPages)
									data.totalPages = lastPage;

								// Add element
								data.pageObjs[page] = $(element).addClass('turn-page p' + page);

								// Add page
								turnMethods._addPage.call(this, page);

								// Update view
								if (data.done)
									this.turn('update');

								turnMethods._removeFromDOM.call(this);
							}

							return this;
						},

						// Adds a page from internal data

						_addPage: function (page) {

							var data = this.data(),
								element = data.pageObjs[page];

							if (element)
								if (turnMethods._necessPage.call(this, page)) {

									if (!data.pageWrap[page]) {

										var pageWidth = (data.display == 'double') ? this.width() / 2 : this.width(),
											pageHeight = this.height();

										element.css({ width: pageWidth, height: pageHeight });

										// Place
										data.pagePlace[page] = page;

										// Wrapper
										data.pageWrap[page] = $('<div/>', {
											'class': 'turn-page-wrapper',
											page: page,
											css: {
												position: 'absolute',
												overflow: 'hidden',
												width: pageWidth,
												height: pageHeight
											}
										}).
											css(pagePosition[(data.display == 'double') ? page % 2 : 0]);

										// Append to this
										this.append(data.pageWrap[page]);

										// Move data.pageObjs[page] (element) to wrapper
										data.pageWrap[page].prepend(data.pageObjs[page]);
									}

									// If the page is in the current view, create the flip effect
									if (!page || turnMethods._setPageLoc.call(this, page) == 1)
										turnMethods._makeFlip.call(this, page);

								} else {

									// Place
									data.pagePlace[page] = 0;

									// Remove element from the DOM
									if (data.pageObjs[page])
										data.pageObjs[page].remove();

								}

						},

						// Checks if a page is in memory

						hasPage: function (page) {

							return page in this.data().pageObjs;

						},

						// Prepares the flip effect for a page

						_makeFlip: function (page) {

							var data = this.data();

							if (!data.pages[page] && data.pagePlace[page] == page) {

								var single = data.display == 'single',
									even = page % 2;

								data.pages[page] = data.pageObjs[page].
									css({ width: (single) ? this.width() : this.width() / 2, height: this.height() }).
									flip({
										page: page,
										next: (single && page === data.totalPages) ? page - 1 : ((even || single) ? page + 1 : page - 1),
										turn: this,
										duration: data.opts.duration,
										acceleration: data.opts.acceleration,
										corners: (single) ? 'all' : ((even) ? 'forward' : 'backward'),
										backGradient: data.opts.gradients,
										frontGradient: data.opts.gradients
									}).
									flip('disable', data.disabled).
									bind('pressed', turnMethods._pressed).
									bind('released', turnMethods._released).
									bind('start', turnMethods._start).
									bind('end', turnMethods._end).
									bind('flip', turnMethods._flip);
							}
							return data.pages[page];
						},

						// Makes pages within a range

						_makeRange: function () {

							var page,
								data = this.data(),
								range = this.turn('range');

							for (page = range[0]; page <= range[1]; page++)
								turnMethods._addPage.call(this, page);

						},

						// Returns a range of `pagesInDOM` pages that should be in the DOM
						// Example:
						// - page of the current view, return true
						// * page is in the range, return true
						// 0 page is not in the range, return false
						//
						// 1 2-3 4-5 6-7 8-9 10-11 12-13
						//    **  **  --   **  **

						range: function (page) {

							var remainingPages, left, right,
								data = this.data();
							page = page || data.tpage || data.page;
							var view = turnMethods._view.call(this, page);

							if (page < 1 || page > data.totalPages)
								throw new Error('"' + page + '" is not a page for range');

							view[1] = view[1] || view[0];

							if (view[0] >= 1 && view[1] <= data.totalPages) {

								remainingPages = Math.floor((pagesInDOM - 2) / 2);

								if (data.totalPages - view[1] > view[0]) {
									left = Math.min(view[0] - 1, remainingPages);
									right = 2 * remainingPages - left;
								} else {
									right = Math.min(data.totalPages - view[1], remainingPages);
									left = 2 * remainingPages - right;
								}

							} else {
								left = pagesInDOM - 1;
								right = pagesInDOM - 1;
							}

							return [Math.max(1, view[0] - left), Math.min(data.totalPages, view[1] + right)];

						},

						// Detects if a page is within the range of `pagesInDOM` from the current view

						_necessPage: function (page) {

							if (page === 0)
								return true;

							var range = this.turn('range');

							return page >= range[0] && page <= range[1];

						},

						// Releases memory by removing pages from the DOM

						_removeFromDOM: function () {

							var page, data = this.data();

							for (page in data.pageWrap)
								if (has(page, data.pageWrap) && !turnMethods._necessPage.call(this, page))
									turnMethods._removePageFromDOM.call(this, page);


						},

						// Removes a page from DOM and its internal references

						_removePageFromDOM: function (page) {

							var data = this.data();

							if (data.pages[page]) {
								var dd = data.pages[page].data();
								if (dd.f && dd.f.fwrapper)
									dd.f.fwrapper.remove();
								data.pages[page].remove();
								delete data.pages[page];
							}

							if (data.pageObjs[page])
								data.pageObjs[page].remove();

							if (data.pageWrap[page]) {
								data.pageWrap[page].remove();
								delete data.pageWrap[page];
							}

							delete data.pagePlace[page];

						},

						// Removes a page

						removePage: function (page) {

							var data = this.data();

							if (data.pageObjs[page]) {
								// Stop animations
								this.turn('stop');

								// Remove `page`
								turnMethods._removePageFromDOM.call(this, page);
								delete data.pageObjs[page];

								// Move the pages behind `page`
								turnMethods._movePages.call(this, page, -1);

								// Resize the size of this magazine
								data.totalPages = data.totalPages - 1;
								turnMethods._makeRange.call(this);

								// Check the current view
								if (data.page > data.totalPages)
									this.turn('page', data.totalPages);
							}

							return this;

						},

						// Moves pages

						_movePages: function (from, change) {

							var page,
								data = this.data(),
								single = data.display == 'single',
								move = function (page) {

									var next = page + change,
										odd = next % 2;

									if (data.pageObjs[page])
										data.pageObjs[next] = data.pageObjs[page].removeClass('page' + page).addClass('page' + next);

									if (data.pagePlace[page] && data.pageWrap[page]) {
										data.pagePlace[next] = next;
										data.pageWrap[next] = data.pageWrap[page].css(pagePosition[(single) ? 0 : odd]).attr('page', next);

										if (data.pages[page])
											data.pages[next] = data.pages[page].flip('options', {
												page: next,
												next: (single || odd) ? next + 1 : next - 1,
												corners: (single) ? 'all' : ((odd) ? 'forward' : 'backward')
											});

										if (change) {
											delete data.pages[page];
											delete data.pagePlace[page];
											delete data.pageObjs[page];
											delete data.pageWrap[page];
											delete data.pageObjs[page];
										}
									}
								};

							if (change > 0)
								for (page = data.totalPages; page >= from; page--) move(page);
							else
								for (page = from; page <= data.totalPages; page++) move(page);

						},

						// Sets or Gets the display mode

						display: function (display) {

							var data = this.data(),
								currentDisplay = data.display;

							if (display) {

								if ($.inArray(display, displays) == -1)
									throw new Error('"' + display + '" is not a value for display');

								if (display == 'single') {
									if (!data.pageObjs[0]) {
										this.turn('stop').
											css({ 'overflow': 'hidden' });
										data.pageObjs[0] = $('<div />', { 'class': 'turn-page p-temporal' }).
											css({ width: this.width(), height: this.height() }).
											appendTo(this);
									}
								} else {
									if (data.pageObjs[0]) {
										this.turn('stop').
											css({ 'overflow': '' });
										data.pageObjs[0].remove();
										delete data.pageObjs[0];
									}
								}

								data.display = display;

								if (currentDisplay) {
									var size = this.turn('size');
									turnMethods._movePages.call(this, 1, 0);
									this.turn('size', size.width, size.height).
										turn('update');
								}

								return this;

							} else
								return currentDisplay;

						},

						// Detects if the pages are being animated

						animating: function () {

							return this.data().pageMv.length > 0;

						},

						// Disables and enables the effect

						disable: function (bool) {

							var page,
								data = this.data(),
								view = this.turn('view');

							data.disabled = bool === undefined || bool === true;

							for (page in data.pages)
								if (has(page, data.pages))
									data.pages[page].flip('disable', bool ? $.inArray(page, view) : false);

							return this;

						},

						// Gets and sets the size

						size: function (width, height) {

							if (width && height) {

								var data = this.data(), pageWidth = (data.display == 'double') ? width / 2 : width, page;

								this.css({ width: width, height: height });

								if (data.pageObjs[0])
									data.pageObjs[0].css({ width: pageWidth, height: height });

								for (page in data.pageWrap) {
									if (!has(page, data.pageWrap)) continue;
									data.pageObjs[page].css({ width: pageWidth, height: height });
									data.pageWrap[page].css({ width: pageWidth, height: height });
									if (data.pages[page])
										data.pages[page].css({ width: pageWidth, height: height });
								}

								this.turn('resize');

								return this;

							} else {

								return { width: this.width(), height: this.height() };

							}
						},

						// Resizes each page

						resize: function () {

							var page, data = this.data();

							if (data.pages[0]) {
								data.pageWrap[0].css({ left: -this.width() });
								data.pages[0].flip('resize', true);
							}

							for (page = 1; page <= data.totalPages; page++)
								if (data.pages[page])
									data.pages[page].flip('resize', true);


						},

						// Removes an animation from the cache

						_removeMv: function (page) {

							var i, data = this.data();

							for (i = 0; i < data.pageMv.length; i++)
								if (data.pageMv[i] == page) {
									data.pageMv.splice(i, 1);
									return true;
								}

							return false;

						},

						// Adds an animation to the cache

						_addMv: function (page) {

							var data = this.data();

							turnMethods._removeMv.call(this, page);
							data.pageMv.push(page);

						},

						// Gets indexes for a view

						_view: function (page) {

							var data = this.data();
							page = page || data.page;

							if (data.display == 'double')
								return (page % 2) ? [page - 1, page] : [page, page + 1];
							else
								return [page];

						},

						// Gets a view

						view: function (page) {

							var data = this.data(), view = turnMethods._view.call(this, page);

							return (data.display == 'double') ? [(view[0] > 0) ? view[0] : 0, (view[1] <= data.totalPages) ? view[1] : 0]
								: [(view[0] > 0 && view[0] <= data.totalPages) ? view[0] : 0];

						},

						// Stops animations

						stop: function (ok) {

							var i, opts, data = this.data(), pages = data.pageMv;

							data.pageMv = [];

							if (data.tpage) {
								data.page = data.tpage;
								delete data['tpage'];
							}

							for (i in pages) {
								if (!has(i, pages)) continue;
								opts = data.pages[pages[i]].data().f.opts;
								flipMethods._moveFoldingPage.call(data.pages[pages[i]], null);
								data.pages[pages[i]].flip('hideFoldedPage');
								data.pagePlace[opts.next] = opts.next;

								if (opts.force) {
									opts.next = (opts.page % 2 === 0) ? opts.page - 1 : opts.page + 1;
									delete opts['force'];
								}

							}

							this.turn('update');

							return this;
						},

						// Gets and sets the number of pages

						pages: function (pages) {

							var data = this.data();

							if (pages) {
								if (pages < data.totalPages) {

									for (var page = pages + 1; page <= data.totalPages; page++)
										this.turn('removePage', page);

									if (this.turn('page') > pages)
										this.turn('page', pages);
								}

								data.totalPages = pages;

								return this;
							} else
								return data.totalPages;

						},

						// Sets a page without effect

						_fitPage: function (page, ok) {

							var data = this.data(), newView = this.turn('view', page);

							if (data.page != page) {
								this.trigger('turning', [page, newView]);
								if ($.inArray(1, newView) != -1) this.trigger('first');
								if ($.inArray(data.totalPages, newView) != -1) this.trigger('last');
							}

							if (!data.pageObjs[page])
								return;

							data.tpage = page;

							this.turn('stop', ok);
							turnMethods._removeFromDOM.call(this);
							turnMethods._makeRange.call(this);
							this.trigger('turned', [page, newView]);

						},

						// Turns to a page

						_turnPage: function (page) {

							var current, next,
								data = this.data(),
								view = this.turn('view'),
								newView = this.turn('view', page);

							if (data.page != page) {
								this.trigger('turning', [page, newView]);
								if ($.inArray(1, newView) != -1) this.trigger('first');
								if ($.inArray(data.totalPages, newView) != -1) this.trigger('last');
							}

							if (!data.pageObjs[page])
								return;

							data.tpage = page;

							this.turn('stop');

							turnMethods._makeRange.call(this);

							if (data.display == 'single') {
								current = view[0];
								next = newView[0];
							} else if (view[1] && page > view[1]) {
								current = view[1];
								next = newView[0];
							} else if (view[0] && page < view[0]) {
								current = view[0];
								next = newView[1];
							}

							if (data.pages[current]) {

								var opts = data.pages[current].data().f.opts;
								data.tpage = next;

								if (opts.next != next) {
									opts.next = next;
									data.pagePlace[next] = opts.page;
									opts.force = true;
								}

								if (data.display == 'single')
									data.pages[current].flip('turnPage', (newView[0] > view[0]) ? 'br' : 'bl');
								else
									data.pages[current].flip('turnPage');
							}

						},

						// Gets and sets a page

						page: function (page) {

							page = parseInt(page, 10);

							var data = this.data();

							if (page > 0 && page <= data.totalPages) {
								if (!data.done || $.inArray(page, this.turn('view')) != -1)
									turnMethods._fitPage.call(this, page);
								else
									turnMethods._turnPage.call(this, page);

								return this;

							} else
								return data.page;

						},

						// Turns to the next view

						next: function () {

							var data = this.data();
							return this.turn('page', turnMethods._view.call(this, data.page).pop() + 1);

						},

						// Turns to the previous view

						previous: function () {

							var data = this.data();
							return this.turn('page', turnMethods._view.call(this, data.page).shift() - 1);

						},

						// Adds a motion to the internal list

						_addMotionPage: function () {

							var opts = $(this).data().f.opts,
								turn = opts.turn,
								dd = turn.data();

							opts.pageMv = opts.page;
							turnMethods._addMv.call(turn, opts.pageMv);
							dd.pagePlace[opts.next] = opts.page;
							turn.turn('update');

						},

						// This event is called in context of flip

						_start: function (e, opts, corner) {

							var data = opts.turn.data(),
								event = $.Event('start');

							e.stopPropagation();

							opts.turn.trigger(event, [opts, corner]);

							if (event.isDefaultPrevented()) {
								e.preventDefault();
								return;
							}

							if (data.display == 'single') {

								var left = corner.charAt(1) == 'l';
								if ((opts.page == 1 && left) || (opts.page == data.totalPages && !left))
									e.preventDefault();
								else {
									if (left) {
										opts.next = (opts.next < opts.page) ? opts.next : opts.page - 1;
										opts.force = true;
									} else
										opts.next = (opts.next > opts.page) ? opts.next : opts.page + 1;
								}

							}

							turnMethods._addMotionPage.call(this);
						},

						// This event is called in context of flip

						_end: function (e, turned) {

							var that = $(this),
								data = that.data().f,
								opts = data.opts,
								turn = opts.turn,
								dd = turn.data();

							e.stopPropagation();

							if (turned || dd.tpage) {

								if (dd.tpage == opts.next || dd.tpage == opts.page) {
									delete dd['tpage'];
									turnMethods._fitPage.call(turn, dd.tpage || opts.next, true);
								}

							} else {
								turnMethods._removeMv.call(turn, opts.pageMv);
								turn.turn('update');
							}

						},

						// This event is called in context of flip

						_pressed: function () {

							var page,
								that = $(this),
								data = that.data().f,
								turn = data.opts.turn,
								pages = turn.data().pages;

							for (page in pages)
								if (page != data.opts.page)
									pages[page].flip('disable', true);

							return data.time = new Date().getTime();

						},

						// This event is called in context of flip

						_released: function (e, point) {

							var that = $(this),
								data = that.data().f;

							e.stopPropagation();

							if ((new Date().getTime()) - data.time < 200 || point.x < 0 || point.x > $(this).width()) {
								e.preventDefault();
								data.opts.turn.data().tpage = data.opts.next;
								data.opts.turn.turn('update');
								$(that).flip('turnPage');
							}

						},

						// This event is called in context of flip

						_flip: function () {

							var opts = $(this).data().f.opts;

							opts.turn.trigger('turn', [opts.next]);

						},

						// Calculate the z-index value for pages during the animation

						calculateZ: function (mv) {

							var i, page, nextPage, placePage, dpage,
								that = this,
								data = this.data(),
								view = this.turn('view'),
								currentPage = view[0] || view[1],
								r = { pageZ: {}, partZ: {}, pageV: {} },

								addView = function (page) {
									var view = that.turn('view', page);
									if (view[0]) r.pageV[view[0]] = true;
									if (view[1]) r.pageV[view[1]] = true;
								};

							for (i = 0; i < mv.length; i++) {
								page = mv[i];
								nextPage = data.pages[page].data().f.opts.next;
								placePage = data.pagePlace[page];
								addView(page);
								addView(nextPage);
								dpage = (data.pagePlace[nextPage] == nextPage) ? nextPage : page;
								r.pageZ[dpage] = data.totalPages - Math.abs(currentPage - dpage);
								r.partZ[placePage] = data.totalPages * 2 + Math.abs(currentPage - dpage);
							}

							return r;
						},

						// Updates the z-index and display property of every page

						update: function () {

							var page,
								data = this.data();

							if (data.pageMv.length && data.pageMv[0] !== 0) {

								// Update motion

								var apage,
									pos = this.turn('calculateZ', data.pageMv),
									view = this.turn('view', data.tpage);

								if (data.pagePlace[view[0]] == view[0]) apage = view[0];
								else if (data.pagePlace[view[1]] == view[1]) apage = view[1];

								for (page in data.pageWrap) {

									if (!has(page, data.pageWrap)) continue;

									data.pageWrap[page].css({ display: (pos.pageV[page]) ? '' : 'none', 'z-index': pos.pageZ[page] || 0 });

									if (data.pages[page]) {
										data.pages[page].flip('z', pos.partZ[page] || null);

										if (pos.pageV[page])
											data.pages[page].flip('resize');

										if (data.tpage)
											data.pages[page].flip('disable', true); // data.disabled || page!=apage
									}
								}

							} else {

								// Update static pages

								for (page in data.pageWrap) {
									if (!has(page, data.pageWrap)) continue;
									var pageLocation = turnMethods._setPageLoc.call(this, page);
									if (data.pages[page])
										data.pages[page].flip('disable', data.disabled || pageLocation != 1).flip('z', null);
								}
							}
						},

						// Sets the z-index and display property of a page
						// It depends on the current view

						_setPageLoc: function (page) {

							var data = this.data(),
								view = this.turn('view');

							if (page == view[0] || page == view[1]) {
								data.pageWrap[page].css({ 'z-index': data.totalPages, display: '' });
								return 1;
							} else if ((data.display == 'single' && page == view[0] + 1) || (data.display == 'double' && page == view[0] - 2 || page == view[1] + 2)) {
								data.pageWrap[page].css({ 'z-index': data.totalPages - 1, display: '' });
								return 2;
							} else {
								data.pageWrap[page].css({ 'z-index': 0, display: 'none' });
								return 0;
							}
						}
					},

					// Methods and properties for the flip page effect

					flipMethods = {

						// Constructor

						init: function (opts) {

							if (opts.gradients) {
								opts.frontGradient = true;
								opts.backGradient = true;
							}

							this.data({ f: {} });
							this.flip('options', opts);

							flipMethods._addPageWrapper.call(this);

							return this;
						},

						setData: function (d) {

							var data = this.data();

							data.f = $.extend(data.f, d);

							return this;
						},

						options: function (opts) {

							var data = this.data().f;

							if (opts) {
								flipMethods.setData.call(this, { opts: $.extend({}, data.opts || flipOptions, opts) });
								return this;
							} else
								return data.opts;

						},

						z: function (z) {

							var data = this.data().f;
							data.opts['z-index'] = z;
							data.fwrapper.css({ 'z-index': z || parseInt(data.parent.css('z-index'), 10) || 0 });

							return this;
						},

						_cAllowed: function () {

							return corners[this.data().f.opts.corners] || this.data().f.opts.corners;

						},

						_cornerActivated: function (e) {
							if (e.originalEvent === undefined) {
								return false;
							}

							e = (isTouch) ? e.originalEvent.touches : [e];

							var data = this.data().f,
								pos = data.parent.offset(),
								width = this.width(),
								height = this.height(),
								c = { x: Math.max(0, e[0].pageX - pos.left), y: Math.max(0, e[0].pageY - pos.top) },
								csz = data.opts.cornerSize,
								allowedCorners = flipMethods._cAllowed.call(this);

							if (c.x <= 0 || c.y <= 0 || c.x >= width || c.y >= height) return false;

							if (c.y < csz) c.corner = 't';
							else if (c.y >= height - csz) c.corner = 'b';
							else return false;

							if (c.x <= csz) c.corner += 'l';
							else if (c.x >= width - csz) c.corner += 'r';
							else return false;

							return ($.inArray(c.corner, allowedCorners) == -1) ? false : c;

						},

						_c: function (corner, opts) {

							opts = opts || 0;
							return ({
								tl: point2D(opts, opts),
								tr: point2D(this.width() - opts, opts),
								bl: point2D(opts, this.height() - opts),
								br: point2D(this.width() - opts, this.height() - opts)
							})[corner];

						},

						_c2: function (corner) {

							return {
								tl: point2D(this.width() * 2, 0),
								tr: point2D(-this.width(), 0),
								bl: point2D(this.width() * 2, this.height()),
								br: point2D(-this.width(), this.height())
							}[corner];

						},

						_foldingPage: function (corner) {

							var opts = this.data().f.opts;

							if (opts.folding) return opts.folding;
							else if (opts.turn) {
								var data = opts.turn.data();
								if (data.display == 'single')
									return (data.pageObjs[opts.next]) ? data.pageObjs[0] : null;
								else
									return data.pageObjs[opts.next];
							}

						},

						_backGradient: function () {

							var data = this.data().f,
								turn = data.opts.turn,
								gradient = data.opts.backGradient &&
									(!turn || turn.data().display == 'single' || (data.opts.page != 2 && data.opts.page != turn.data().totalPages - 1));


							if (gradient && !data.bshadow)
								data.bshadow = $('<div/>', divAtt(0, 0, 1)).
									css({ 'position': '', width: this.width(), height: this.height() }).
									appendTo(data.parent);

							return gradient;

						},

						resize: function (full) {

							var data = this.data().f,
								width = this.width(),
								height = this.height(),
								size = Math.round(Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)));

							if (full) {
								data.wrapper.css({ width: size, height: size });
								data.fwrapper.css({ width: size, height: size }).
									children(':first-child').
									css({ width: width, height: height });

								data.fpage.css({ width: height, height: width });

								if (data.opts.frontGradient)
									data.ashadow.css({ width: height, height: width });

								if (flipMethods._backGradient.call(this))
									data.bshadow.css({ width: width, height: height });
							}

							if (data.parent.is(':visible')) {
								data.fwrapper.css({
									top: data.parent.offset().top,
									left: data.parent.offset().left
								});

								if (data.opts.turn)
									data.fparent.css({ top: -data.opts.turn.offset().top, left: -data.opts.turn.offset().left });
							}

							this.flip('z', data.opts['z-index']);

						},

						// Prepares the page by adding a general wrapper and another objects

						_addPageWrapper: function () {

							var att,
								data = this.data().f,
								parent = this.parent();

							if (!data.wrapper) {

								var left = this.css('left'),
									top = this.css('top'),
									width = this.width(),
									height = this.height(),
									size = Math.round(Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)));

								data.parent = parent;
								data.fparent = (data.opts.turn) ? data.opts.turn.data().fparent : $('#turn-fwrappers');

								if (!data.fparent) {
									var fparent = $('<div/>', { css: { 'pointer-events': 'none' } }).hide();
									fparent.data().flips = 0;

									if (data.opts.turn) {
										fparent.css(divAtt(-data.opts.turn.offset().top, -data.opts.turn.offset().left, 'auto', 'visible').css).
											appendTo(data.opts.turn);

										data.opts.turn.data().fparent = fparent;
									} else {
										fparent.css(divAtt(0, 0, 'auto', 'visible').css).
											attr('id', 'turn-fwrappers').
											appendTo($('body'));
									}

									data.fparent = fparent;
								}

								this.css({ position: 'absolute', top: 0, left: 0, bottom: 'auto', right: 'auto' });

								data.wrapper = $('<div/>', divAtt(0, 0, this.css('z-index'))).
									appendTo(parent).
									prepend(this);

								data.fwrapper = $('<div/>', divAtt(parent.offset().top, parent.offset().left)).
									hide().
									appendTo(data.fparent);

								data.fpage = $('<div/>', { css: { cursor: 'default' } }).
									appendTo($('<div/>', divAtt(0, 0, 0, 'visible')).
										appendTo(data.fwrapper));

								if (data.opts.frontGradient)
									data.ashadow = $('<div/>', divAtt(0, 0, 1)).
										appendTo(data.fpage);

								// Save data

								flipMethods.setData.call(this, data);

								// Set size
								flipMethods.resize.call(this, true);
							}

						},

						// Takes a 2P point from the screen and applies the transformation

						_fold: function (point) {

							var that = this,
								a = 0,
								alpha = 0,
								beta,
								px,
								gradientEndPointA,
								gradientEndPointB,
								gradientStartV,
								gradientSize,
								gradientOpacity,
								mv = point2D(0, 0),
								df = point2D(0, 0),
								tr = point2D(0, 0),
								width = this.width(),
								height = this.height(),
								folding = flipMethods._foldingPage.call(this),
								tan = Math.tan(alpha),
								data = this.data().f,
								ac = data.opts.acceleration,
								h = data.wrapper.height(),
								o = flipMethods._c.call(this, point.corner),
								top = point.corner.substr(0, 1) == 't',
								left = point.corner.substr(1, 1) == 'l',

								compute = function () {
									var rel = point2D((o.x) ? o.x - point.x : point.x, (o.y) ? o.y - point.y : point.y),
										tan = (Math.atan2(rel.y, rel.x)),
										middle;

									alpha = A90 - tan;
									a = deg(alpha);
									middle = point2D((left) ? width - rel.x / 2 : point.x + rel.x / 2, rel.y / 2);

									var gamma = alpha - Math.atan2(middle.y, middle.x),
										distance = Math.max(0, Math.sin(gamma) * Math.sqrt(Math.pow(middle.x, 2) + Math.pow(middle.y, 2)));

									tr = point2D(distance * Math.sin(alpha), distance * Math.cos(alpha));

									if (alpha > A90) {

										tr.x = tr.x + Math.abs(tr.y * Math.tan(tan));
										tr.y = 0;

										if (Math.round(tr.x * Math.tan(PI - alpha)) < height) {

											point.y = Math.sqrt(Math.pow(height, 2) + 2 * middle.x * rel.x);
											if (top) point.y = height - point.y;
											return compute();

										}
									}

									if (alpha > A90) {
										var beta = PI - alpha, dd = h - height / Math.sin(beta);
										mv = point2D(Math.round(dd * Math.cos(beta)), Math.round(dd * Math.sin(beta)));
										if (left) mv.x = - mv.x;
										if (top) mv.y = - mv.y;
									}

									px = Math.round(tr.y / Math.tan(alpha) + tr.x);

									var side = width - px,
										sideX = side * Math.cos(alpha * 2),
										sideY = side * Math.sin(alpha * 2);
									df = point2D(Math.round((left ? side - sideX : px + sideX)), Math.round((top) ? sideY : height - sideY));


									// GRADIENTS

									gradientSize = side * Math.sin(alpha);
									var endingPoint = flipMethods._c2.call(that, point.corner),
										far = Math.sqrt(Math.pow(endingPoint.x - point.x, 2) + Math.pow(endingPoint.y - point.y, 2));

									gradientOpacity = (far < width) ? far / width : 1;


									if (data.opts.frontGradient) {

										gradientStartV = gradientSize > 100 ? (gradientSize - 100) / gradientSize : 0;
										gradientEndPointA = point2D(gradientSize * Math.sin(A90 - alpha) / height * 100, gradientSize * Math.cos(A90 - alpha) / width * 100);

										if (top) gradientEndPointA.y = 100 - gradientEndPointA.y;
										if (left) gradientEndPointA.x = 100 - gradientEndPointA.x;
									}

									if (flipMethods._backGradient.call(that)) {

										gradientEndPointB = point2D(gradientSize * Math.sin(alpha) / width * 100, gradientSize * Math.cos(alpha) / height * 100);
										if (!left) gradientEndPointB.x = 100 - gradientEndPointB.x;
										if (!top) gradientEndPointB.y = 100 - gradientEndPointB.y;
									}
									//

									tr.x = Math.round(tr.x);
									tr.y = Math.round(tr.y);

									return true;
								},

								transform = function (tr, c, x, a) {

									var f = ['0', 'auto'], mvW = (width - h) * x[0] / 100, mvH = (height - h) * x[1] / 100,
										v = { left: f[c[0]], top: f[c[1]], right: f[c[2]], bottom: f[c[3]] },
										aliasingFk = (a != 90 && a != -90) ? (left ? -1 : 1) : 0;

									x = x[0] + '% ' + x[1] + '%';

									that.css(v).transform(rotate(a) + translate(tr.x + aliasingFk, tr.y, ac), x);

									data.fpage.parent().css(v);
									data.wrapper.transform(translate(-tr.x + mvW - aliasingFk, -tr.y + mvH, ac) + rotate(-a), x);

									data.fwrapper.transform(translate(-tr.x + mv.x + mvW, -tr.y + mv.y + mvH, ac) + rotate(-a), x);
									data.fpage.parent().transform(rotate(a) + translate(tr.x + df.x - mv.x, tr.y + df.y - mv.y, ac), x);

									if (data.opts.frontGradient)
										gradient(data.ashadow,
											point2D(left ? 100 : 0, top ? 100 : 0),
											point2D(gradientEndPointA.x, gradientEndPointA.y),
											[[gradientStartV, 'rgba(0,0,0,0)'],
											[((1 - gradientStartV) * 0.8) + gradientStartV, 'rgba(0,0,0,' + (0.2 * gradientOpacity) + ')'],
											[1, 'rgba(255,255,255,' + (0.2 * gradientOpacity) + ')']],
											3,
											alpha);

									if (flipMethods._backGradient.call(that))
										gradient(data.bshadow,
											point2D(left ? 0 : 100, top ? 0 : 100),
											point2D(gradientEndPointB.x, gradientEndPointB.y),
											[[0.8, 'rgba(0,0,0,0)'],
											[1, 'rgba(0,0,0,' + (0.3 * gradientOpacity) + ')'],
											[1, 'rgba(0,0,0,0)']],
											3);

								};

							switch (point.corner) {
								case 'tl':
									point.x = Math.max(point.x, 1);
									compute();
									transform(tr, [1, 0, 0, 1], [100, 0], a);
									data.fpage.transform(translate(-height, -width, ac) + rotate(90 - a * 2), '100% 100%');
									folding.transform(rotate(90) + translate(0, -height, ac), '0% 0%');
									break;
								case 'tr':
									point.x = Math.min(point.x, width - 1);
									compute();
									transform(point2D(-tr.x, tr.y), [0, 0, 0, 1], [0, 0], -a);
									data.fpage.transform(translate(0, -width, ac) + rotate(-90 + a * 2), '0% 100%');
									folding.transform(rotate(270) + translate(-width, 0, ac), '0% 0%');
									break;
								case 'bl':
									point.x = Math.max(point.x, 1);
									compute();
									transform(point2D(tr.x, -tr.y), [1, 1, 0, 0], [100, 100], -a);
									data.fpage.transform(translate(-height, 0, ac) + rotate(-90 + a * 2), '100% 0%');
									folding.transform(rotate(270) + translate(-width, 0, ac), '0% 0%');
									break;
								case 'br':
									point.x = Math.min(point.x, width - 1);
									compute();
									transform(point2D(-tr.x, -tr.y), [0, 1, 1, 0], [0, 100], a);
									data.fpage.transform(rotate(90 - a * 2), '0% 0%');
									folding.transform(rotate(90) + translate(0, -height, ac), '0% 0%');

									break;
							}

							data.point = point;

						},

						_moveFoldingPage: function (bool) {

							var data = this.data().f,
								folding = flipMethods._foldingPage.call(this);

							if (folding) {
								if (bool) {
									if (!data.fpage.children()[data.ashadow ? '1' : '0']) {
										flipMethods.setData.call(this, { backParent: folding.parent() });
										data.fpage.prepend(folding);
									}
								} else {
									if (data.backParent)
										data.backParent.prepend(folding);

								}
							}

						},

						_showFoldedPage: function (c, animate) {

							var folding = flipMethods._foldingPage.call(this),
								dd = this.data(),
								data = dd.f;

							if (!data.point || data.point.corner != c.corner) {
								var event = $.Event('start');
								this.trigger(event, [data.opts, c.corner]);

								if (event.isDefaultPrevented())
									return false;
							}


							if (folding) {

								if (animate) {

									var that = this, point = (data.point && data.point.corner == c.corner) ? data.point : flipMethods._c.call(this, c.corner, 1);

									this.animatef({
										from: [point.x, point.y], to: [c.x, c.y], duration: 500, frame: function (v) {
											c.x = Math.round(v[0]);
											c.y = Math.round(v[1]);
											flipMethods._fold.call(that, c);
										}
									});

								} else {

									flipMethods._fold.call(this, c);
									if (dd.effect && !dd.effect.turning)
										this.animatef(false);

								}

								if (!data.fwrapper.is(':visible')) {
									data.fparent.show().data().flips++;
									flipMethods._moveFoldingPage.call(this, true);
									data.fwrapper.show();

									if (data.bshadow)
										data.bshadow.show();
								}

								return true;
							}

							return false;
						},

						hide: function () {

							var data = this.data().f,
								folding = flipMethods._foldingPage.call(this);

							if ((--data.fparent.data().flips) === 0)
								data.fparent.hide();

							this.css({ left: 0, top: 0, right: 'auto', bottom: 'auto' }).transform('', '0% 100%');

							data.wrapper.transform('', '0% 100%');

							data.fwrapper.hide();

							if (data.bshadow)
								data.bshadow.hide();

							folding.transform('', '0% 0%');

							return this;
						},

						hideFoldedPage: function (animate) {

							var data = this.data().f;

							if (!data.point) return;

							var that = this,
								p1 = data.point,
								hide = function () {
									data.point = null;
									that.flip('hide');
									that.trigger('end', [false]);
								};

							if (animate) {
								var p4 = flipMethods._c.call(this, p1.corner),
									top = (p1.corner.substr(0, 1) == 't'),
									delta = (top) ? Math.min(0, p1.y - p4.y) / 2 : Math.max(0, p1.y - p4.y) / 2,
									p2 = point2D(p1.x, p1.y + delta),
									p3 = point2D(p4.x, p4.y - delta);

								this.animatef({
									from: 0,
									to: 1,
									frame: function (v) {
										var np = bezier(p1, p2, p3, p4, v);
										p1.x = np.x;
										p1.y = np.y;
										flipMethods._fold.call(that, p1);
									},
									complete: hide,
									duration: 800,
									hiding: true
								});

							} else {
								this.animatef(false);
								hide();
							}
						},

						turnPage: function (corner) {

							var that = this,
								data = this.data().f;

							corner = { corner: (data.corner) ? data.corner.corner : corner || flipMethods._cAllowed.call(this)[0] };

							var p1 = data.point || flipMethods._c.call(this, corner.corner, (data.opts.turn) ? data.opts.turn.data().opts.elevation : 0),
								p4 = flipMethods._c2.call(this, corner.corner);

							this.trigger('flip').
								animatef({
									from: 0,
									to: 1,
									frame: function (v) {
										var np = bezier(p1, p1, p4, p4, v);
										corner.x = np.x;
										corner.y = np.y;
										flipMethods._showFoldedPage.call(that, corner);
									},

									complete: function () {
										that.trigger('end', [true]);
									},
									duration: data.opts.duration,
									turning: true
								});

							data.corner = null;
						},

						moving: function () {

							return 'effect' in this.data();

						},

						isTurning: function () {

							return this.flip('moving') && this.data().effect.turning;

						},

						_eventStart: function (e) {

							var data = this.data().f;

							if (!data.disabled && !this.flip('isTurning')) {
								data.corner = flipMethods._cornerActivated.call(this, e);
								if (data.corner && flipMethods._foldingPage.call(this, data.corner)) {
									flipMethods._moveFoldingPage.call(this, true);
									this.trigger('pressed', [data.point]);
									return false;
								} else
									data.corner = null;
							}

						},

						_eventMove: function (e) {

							var data = this.data().f;

							if (!data.disabled) {
								e = (isTouch) ? e.originalEvent.touches : [e];

								if (data.corner) {

									var pos = data.parent.offset();

									data.corner.x = e[0].pageX - pos.left;
									data.corner.y = e[0].pageY - pos.top;

									flipMethods._showFoldedPage.call(this, data.corner);

								} else if (!this.data().effect && this.is(':visible')) { // roll over

									var corner = flipMethods._cornerActivated.call(this, e[0]);
									if (corner) {
										var origin = flipMethods._c.call(this, corner.corner, data.opts.cornerSize / 2);
										corner.x = origin.x;
										corner.y = origin.y;
										flipMethods._showFoldedPage.call(this, corner, true);
									} else
										flipMethods.hideFoldedPage.call(this, true);

								}
							}
						},

						_eventEnd: function () {

							var data = this.data().f;

							if (!data.disabled && data.point) {
								var event = $.Event('released');
								this.trigger(event, [data.point]);
								if (!event.isDefaultPrevented())
									flipMethods.hideFoldedPage.call(this, true);
							}

							data.corner = null;

						},

						disable: function (disable) {

							flipMethods.setData.call(this, { 'disabled': disable });
							return this;

						}
					},

					cla = function (that, methods, args) {

						if (!args[0] || typeof (args[0]) == 'object')
							return methods.init.apply(that, args);
						else if (methods[args[0]] && args[0].toString().substr(0, 1) != '_')
							return methods[args[0]].apply(that, Array.prototype.slice.call(args, 1));
						else
							throw args[0] + ' is an invalid value';
					};

				$.extend($.fn, {

					flip: function (req, opts) {
						return cla(this, flipMethods, arguments);
					},

					turn: function (req) {
						return cla(this, turnMethods, arguments);
					},

					transform: function (transform, origin) {

						var properties = {};

						if (origin)
							properties[vendor + 'transform-origin'] = origin;

						properties[vendor + 'transform'] = transform;

						return this.css(properties);

					},

					animatef: function (point) {

						var data = this.data();

						if (data.effect)
							clearInterval(data.effect.handle);

						if (point) {

							if (!point.to.length) point.to = [point.to];
							if (!point.from.length) point.from = [point.from];
							if (!point.easing) point.easing = function (x, t, b, c, data) { return c * Math.sqrt(1 - (t = t / data - 1) * t) + b; };

							var j, diff = [],
								len = point.to.length,
								that = this,
								fps = point.fps || 30,
								time = - fps,
								f = function () {
									var j, v = [];
									time = Math.min(point.duration, time + fps);

									for (j = 0; j < len; j++)
										v.push(point.easing(1, time, point.from[j], diff[j], point.duration));

									point.frame((len == 1) ? v[0] : v);

									if (time == point.duration) {
										clearInterval(data.effect.handle);
										delete data['effect'];
										that.data(data);
										if (point.complete)
											point.complete();
									}
								};

							for (j = 0; j < len; j++)
								diff.push(point.to[j] - point.from[j]);

							data.effect = point;
							data.effect.handle = setInterval(f, fps);
							this.data(data);
							f();
						} else {
							delete data['effect'];
						}
					}
				});


				$.isTouch = isTouch;

			})(jQuery);
		},
	}
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
/* @import '../css/style.css'; */
html{
	height: 100%;
	width: 100%;
}
body{
	height: 100%;
	width: 100%;
}
.boxbox{
	padding-top: 10%;
	height: 100%;
	width: 100%;
	margin: 0 auto;
	text-align: center;
}
#flipbook{
	margin: 0 auto;
	text-align: center;
}
.top{
	background-image:url(./../assets/1.jpg);
	background-position:center;
	background-size: 100%;
}
.top1{
	background-image:url(./../assets/zs1.jpg);
	background-position:center;
}
.hard{
	background-color: #fff;
	background-position:center;
	background-size: 100%;
}
h3 {
	margin: 40px 0 0;
}

ul {
	list-style-type: none;
	padding: 0;
}

li {
	display: inline-block;
	margin: 0 10px;
}

a {
	color: #42b983;
}


</style>

Guess you like

Origin blog.csdn.net/m0_65720832/article/details/128011832
Recommended