/* * imBookFlip - a JQuery Plugin * @author Les Green * Copyright (C) 2009 Intriguing Minds, Inc. * Version 0.6 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * original Javascript BookFlip concept - http://www.coastworx.com/bookflip.php * soundManager - Scott Schiller http://www.schillmania.com/projects/soundmanager2/ * * Demo and Documentation can be found at: * http://www.grasshopperpebbles.com * */ ;(function($) { $.fn.extend({ imBookFlip: function(options) { opts = $.extend({}, $.bookFlip.defaults, options); return this.each(function() { new $.bookFlip(this, opts); }); } }); $.bookFlip = function(obj, opts) { var $this = $(obj); var numPages = 0; var leftStart=0,rightStart=1; var autoPage = 0; var page, book, bW, pageW, pageH, bookOpenW = ''; if (opts.sound_manager) { loadAudio(); } if (opts.iframe.src) { loadIFrame(); } else { page = $('.'+opts.page_class)[0]; init(); } function loadIFrame() { var iframe = $this.append($('').css({"width":$this.width(), "height": $this.height(), "border": "0px", "overflow":"hidden"})); $('#bookFlipIframe').load(function() { book = $('#bookFlipIframe').contents().find('#'+opts.iframe.book); page = $('#bookFlipIframe').contents().find('.'+opts.page_class)[0]; init(); }); }; function init() { bW = parseInt($(page).css('borderLeftWidth')) + parseInt($(page).css('borderRightWidth')); pageW = parseInt($(page).css('width')) + bW; pageH = parseInt($(page).css('height')) + bW; bookOpenW = pageW*2; //var showBinder=false; //change to false for no binder //var binderImage = "parchmentring2.gif"; //location of center binder //var binderWidth = 20; //width of center binder image if(opts.numPixels>100){opts.numPixels=100;}; createPages(); }; function loadAudio() { var ld = (opts.autoFlip != 'click'); var dbg = false; if (opts.sound_manager.debug) { dbg = opts.sound_manager.debug; } soundManager.url = opts.sound_manager.swf_loc; soundManager.debugMode = dbg; soundManager.onload = function() { // soundManager is initialised, ready to use. Create a sound for this demo page. soundManager.createSound({ id: 'bookAudio', url: opts.sound_manager.audio_loc, autoLoad: true, autoPlay: ld }); } }; function createPages() { var pages; if (opts.iframe.src) { $this = $(book); pages = $this.find(' > div'); } else { var bk = $this.attr('id'); pages = $('#'+bk + ' > div'); } $this.css({'width': (bookOpenW + 'px'), 'height': pageH+'px', 'zIndex':0}); $(pages).each(function(i) { numPages++; var orig = $(this).clone(); var div = $('
').attr({'id': 'pageNum'+i, 'class': opts.page_class}).css({'zIndex':20-i, 'border': 'none', 'left': pageW+'px', 'width': pageW+'px', 'height': pageH+'px'}); $(this).replaceWith(div); $(orig).attr('id', 'pageFlip'+i); /*if(!number_check(i)){ if(document.all){ $(orig).css('filter', 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100, FinishOpacity=30, Style=1, StartX=80, FinishX=100, StartY=0, FinishY=0)'); }else{ var pngDiv = $('
').css({'position': 'absolute', 'left':pWidth-80+'px', 'top':'0px', 'width':80+'px', 'height': pHeight+'px', 'background': 'transparent url(bookflip/black_gradient.png) top right repeat-y'}).appendTo($(orig)); } }*/ $(div).append($(orig)); if(opts.allowPageClick){ $(orig).click(function() { if(number_check(i)){ soundCheck(); nextPage(); } else { prevPage(); } }); } }); $this.css('display', 'block'); if (opts.autoFlip == 'auto') { doAutoFlip(); } }; function doAutoFlip() { if (rightStart < numPages) { autoPage = setTimeout(nextPage, opts.autoFlipSpeed); } else { clearTimeout(autoPage); } }; function soundCheck() { if ((opts.sound_manager) && (rightStart == 1)) { if (opts.autoFlip == 'click') { soundManager.play('bookAudio'); } } }; function number_check(value) { // returns true if value is even, false if value is odd return ( 1 - (value%2) ); }; function nextPage(){ var page = (opts.iframe.src) ? $this.find("#pageNum"+rightStart) : $("#pageNum"+rightStart); var lpage = (opts.iframe.src) ? $this.find("#pageNum"+leftStart) : $("#pageNum"+leftStart); $(page).css({'width': '0px', 'left': bookOpenW +'px', 'zIndex': 99}); $(page).animate({'left': 2+'px', 'width': pageW+'px'}, 'slow', function() { $(lpage).css({'width': '0px'}); var z = $(this).css('zIndex'); $(this).css({'left': '0px', 'width': pageW+'px', 'zIndex': z-99}); $(lpage).css({'left': '', 'right': '0px'}); $(this).css({'left': '', 'right': '0px'}); leftStart=leftStart+2; rightStart=rightStart+2; if (opts.autoFlip != 'off') { doAutoFlip(); } }); }; function prevPage(){ leftStart=leftStart-2; rightStart=rightStart-2; var page = (opts.iframe.src) ? $this.find("#pageNum"+leftStart) : $("#pageNum"+leftStart); var rpage = (opts.iframe.src) ? $this.find("#pageNum"+rightStart) : $("#pageNum"+rightStart); var pFlipL = (opts.iframe.src) ? $this.find("#pageFlip"+leftStart) : $("#pageFlip"+leftStart); var pFlipR = (opts.iframe.src) ? $this.find("#pageFlip"+rightStart) : $("#pageFlip"+rightStart); $(page).css({'width': '0px', 'left': '0px'}); $(pFlipR).css({'left': '', 'right': '0px'}); $(page).animate({'left': pageW+'px', 'width': pageW+'px'}, 'slow', function() { $(rpage).css({'width': '0px'}); $(pFlipR).css({'left': '0px'}); $(pFlipL).css({'left': '0px'}); }); }; }; $.bookFlip.defaults = { allowPageClick: true, autoFlip: 'off', //auto, click autoFlipSpeed: 7000, numPixels: 20, //number of pixels to move per frame, more is faster but less smooth pSpeed: '20', //page speed, 20 is best for Opera browser. Less is faster page_class: '', sound_manager: '', // {swf_loc: 'soundmanager/soundmanager2.swf', audio_loc: '', debug: false} iframe: '' //{src: 'test_bookflip3_iframe.html', book: 'myBook'} }; })(jQuery);