如何将turn.js flipbook放入父div中

时间:2016-05-17 23:36:07

标签: javascript jquery plugins

如何将turn.js flipbook放入父div?

我有代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>My webpage</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript" src="/assets/js/modernizr.2.5.3.min.js"></script>
    <script type="text/javascript" src="/assets/js/hash.js"></script>

</head>

<body style="overflow: auto;">
    <div id='parent_div' style="width: 800px; overflow: auto;">
        <div class="magazine-viewport">
            <div class="container">
                <div class="magazine">
                 <!-- Next button -->
                 <div ignore="1" class="next-button"></div>
                 <!-- Previous button -->
                 <div ignore="1" class="previous-button"></div>
                </div>
            </div>
        </div>
    </div>

    <script type="text/javascript">

    function loadApp() {

            var flipbook = $('.magazine');

            $('.magazine-viewport').css('position', 'unset');

            // Check if the CSS was already loaded

            if (flipbook.width()==0 || flipbook.height()==0) {
                    setTimeout(loadApp, 10);
                    return;
            }

            // Create the flipbook

            flipbook.turn({

                            // Magazine width

                            width: 922,

                            // Magazine height

                            height: 600,

                            // Duration in millisecond

                            duration: 1000,

                            // Hardware acceleration

                            acceleration: !isChrome(),

                            // Enables gradients

                            gradients: true,

                            // Auto center this flipbook

                            autoCenter: true,

                            // Elevation from the edge of the flipbook when turning a page

                            elevation: 50,

                            // The number of pages

                            pages: 12,

                            // Events

                            when: {
                                    turning: function(event, page, view) {

                                            var book = $(this),
                                            currentPage = book.turn('page'),
                                            pages = book.turn('pages');

                                            // Update the current URI

                                            Hash.go('page/' + page).update();

                                            // Show and hide navigation buttons

                                            disableControls(page);


                                            $('.thumbnails .page-'+currentPage).
                                                    parent().
                                                    removeClass('current');

                                            $('.thumbnails .page-'+page).
                                                    parent().
                                                    addClass('current');



                                    },

                                    turned: function(event, page, view) {

                                            disableControls(page);

                                            $(this).turn('center');

                                            if (page==1) { 
                                                    $(this).turn('peel', 'br');
                                            }

                                    },

                                    missing: function (event, pages) {

                                            // Add pages that aren't in the magazine

                                            for (var i = 0; i < pages.length; i++)
                                                    addPage(pages[i], $(this));

                                    }
                            }

            });

            // Zoom.js

            $('.magazine-viewport').zoom({
                    flipbook: $('.magazine'),

                    max: function() { 

                            return largeMagazineWidth()/$('.magazine').width();

                    }, 

                    when: {

                            swipeLeft: function() {

                                    $(this).zoom('flipbook').turn('next');

                            },

                            swipeRight: function() {

                                    $(this).zoom('flipbook').turn('previous');

                            },

                            resize: function(event, scale, page, pageElement) {

                                    if (scale==1)
                                            loadSmallPage(page, pageElement);
                                    else
                                            loadLargePage(page, pageElement);

                            },

                            zoomIn: function () {

                                    $('.thumbnails').hide();
                                    $('.made').hide();
                                    $('.magazine').removeClass('animated').addClass('zoom-in');
                                    $('.zoom-icon').removeClass('zoom-icon-in').addClass('zoom-icon-out');

                                    if (!window.escTip && !$.isTouch) {
                                            escTip = true;

                                            $('<div />', {'class': 'exit-message'}).
                                                    html('<div>Press ESC to exit</div>').
                                                            appendTo($('body')).
                                                            delay(2000).
                                                            animate({opacity:0}, 500, function() {
                                                                    $(this).remove();
                                                            });
                                    }
                            },

                            zoomOut: function () {

                                    $('.exit-message').hide();
                                    $('.thumbnails').fadeIn();
                                    $('.made').fadeIn();
                                    $('.zoom-icon').removeClass('zoom-icon-out').addClass('zoom-icon-in');

                                    setTimeout(function(){
                                            $('.magazine').addClass('animated').removeClass('zoom-in');
                                            resizeViewport();
                                    }, 0);

                            }
                    }
            });

            // Zoom event

            if ($.isTouch)
                    $('.magazine-viewport').bind('zoom.doubleTap', zoomTo);
            else
                    $('.magazine-viewport').bind('zoom.tap', zoomTo);


            // Using arrow keys to turn the page

            $(document).keydown(function(e){

                    var previous = 37, next = 39, esc = 27;

                    switch (e.keyCode) {
                            case previous:

                                    // left arrow
                                    $('.magazine').turn('previous');
                                    e.preventDefault();

                            break;
                            case next:

                                    //right arrow
                                    $('.magazine').turn('next');
                                    e.preventDefault();

                            break;
                            case esc:

                                    $('.magazine-viewport').zoom('zoomOut');    
                                    e.preventDefault();

                            break;
                    }
            });

            // URIs - Format #/page/1 

            Hash.on('^page\/([0-9]*)$', {
                    yep: function(path, parts) {
                            var page = parts[1];

                            if (page!==undefined) {
                                    if ($('.magazine').turn('is'))
                                            $('.magazine').turn('page', page);
                            }

                    },
                    nop: function(path) {

                            if ($('.magazine').turn('is'))
                                    $('.magazine').turn('page', 1);
                    }
            });


            $(window).resize(function() {
                    resizeViewport();
            }).bind('orientationchange', function() {
                    resizeViewport();
            });

            // Events for thumbnails

            $('.thumbnails').click(function(event) {

                    var page;

                    if (event.target && (page=/page-([0-9]+)/.exec($(event.target).attr('class'))) ) {

                            $('.magazine').turn('page', page[1]);
                    }
            });

            $('.thumbnails li').
                    bind($.mouseEvents.over, function() {

                            $(this).addClass('thumb-hover');

                    }).bind($.mouseEvents.out, function() {

                            $(this).removeClass('thumb-hover');

                    });

            if ($.isTouch) {

                    $('.thumbnails').
                            addClass('thumbanils-touch').
                            bind($.mouseEvents.move, function(event) {
                                    event.preventDefault();
                            });

            } else {

                    $('.thumbnails ul').mouseover(function() {

                            $('.thumbnails').addClass('thumbnails-hover');

                    }).mousedown(function() {

                            return false;

                    }).mouseout(function() {

                            $('.thumbnails').removeClass('thumbnails-hover');

                    });

            }


            // Regions

            if ($.isTouch) {
                    $('.magazine').bind('touchstart', regionClick);
            } else {
                    $('.magazine').click(regionClick);
            }

            // Events for the next button

            $('.next-button').bind($.mouseEvents.over, function() {

                    $(this).addClass('next-button-hover');

            }).bind($.mouseEvents.out, function() {

                    $(this).removeClass('next-button-hover');

            }).bind($.mouseEvents.down, function() {

                    $(this).addClass('next-button-down');

            }).bind($.mouseEvents.up, function() {

                    $(this).removeClass('next-button-down');

            }).click(function() {

                    $('.magazine').turn('next');

            });

            // Events for the next button

            $('.previous-button').bind($.mouseEvents.over, function() {

                    $(this).addClass('previous-button-hover');

            }).bind($.mouseEvents.out, function() {

                    $(this).removeClass('previous-button-hover');

            }).bind($.mouseEvents.down, function() {

                    $(this).addClass('previous-button-down');

            }).bind($.mouseEvents.up, function() {

                    $(this).removeClass('previous-button-down');

            }).click(function() {

                    $('.magazine').turn('previous');

            });


            resizeViewport();

            $('.magazine').addClass('animated');

    }

    // Zoom icon

     $('.zoom-icon').bind('mouseover', function() { 

            if ($(this).hasClass('zoom-icon-in'))
                    $(this).addClass('zoom-icon-in-hover');

            if ($(this).hasClass('zoom-icon-out'))
                    $(this).addClass('zoom-icon-out-hover');

     }).bind('mouseout', function() { 

             if ($(this).hasClass('zoom-icon-in'))
                    $(this).removeClass('zoom-icon-in-hover');

            if ($(this).hasClass('zoom-icon-out'))
                    $(this).removeClass('zoom-icon-out-hover');

     }).bind('click', function() {

            if ($(this).hasClass('zoom-icon-in'))
                    $('.magazine-viewport').zoom('zoomIn');
            else if ($(this).hasClass('zoom-icon-out')) 
                    $('.magazine-viewport').zoom('zoomOut');

     });


    // Load the HTML4 version if there's not CSS transform

    yepnope({
            test : Modernizr.csstransforms,
            yep: ['/assets/js/turn.js'],
            nope: ['/assets/js/turn.html4.min.js'],
            both: ['/assets/js/zoom.min.js', '/js/magazine.js', '/css/magazine.css'],
            complete: loadApp
    });

    </script>
</body>
</html>

问题是,flipbook应该适合“parent_div”(800px),它所采用的宽度是资源管理器的宽度。通过这种方式,它将它居中放在我的屏幕中心,而不是div的中心。

任何帮助都会受到很大的关注。

1 个答案:

答案 0 :(得分:1)

原来我在/js/magazine.js中有一个功能,它将我的视口大小调整为整个窗口的宽度。

所以我刚刚更改了代码:

var width = $(window).width();

var width = $('#parent_div').width();

和voiala。

PS:这段代码完全来自turn.js的例子。

我希望这个答案可以帮助其他人作为未来的参考。