簡體   English   中英

響應式布局問題-僅在iPad上存在。 不確定如何解決

[英]Responsive Layout Issues - ONLY present on iPad. Unsure how to resolve

我的作品集存在一些問題-如果/在iPad上以垂直方向查看時,向下滾動似乎會使您回到頂部。 我不完全確定這是css / js問題還是其他問題。 將計算機上的瀏覽器調整為相同的尺寸似乎並不能解決問題,所以有點費力。

有沒有人遇到這個問題?

問題站點:

http://alexandermasters.com/portfolio/weddings/20110827

這是主題模板的編輯版本(模板嚴格設計為水平滾動),但是在未修改模板的頁面上( http://alexandermasters.com/portfolio/travel/20100928 ),問題仍然存在。

有什么建議嗎?

編輯:令人反感的代碼(在main.js中)如下:

;(function ($, window, $window, $document, isUndefined) {

    $(function () {

        var $html       = $('html'),
            $main       = $('#main'),
            $header     = $('#header'),
            $footer     = $('#footer'),

            // Components
            $sidebar             = $('.sidebar'),
            $keyRight            = $('#key-right'),
            $keyLeft             = $('#key-left'),
            $navTip              = $('.nav-tip'),
            $scrollContainer     = $('.scroll-container'),
            mobileNav,

            // Functions
            getHorizontalPageHeight,
            pageResizer,

            // Gloal variables
            allowUpscale = $html.is('.upscale');

        if (iPadWithIOS4()) {
            $html.addClass('ipad-ios4');
        }

        getHorizontalPageHeight = function () {
            return $window.height() - $header.outerHeight() - $footer.outerHeight();
        };

        /**
         * Fixes iOS 7.0~7.0.2 Safari bug. Safari reports $window.height() to be 692, which is not correct.
         * Also there's a permanent scrollbar which allows users to scroll 20px, to prevent that we just scroll back to the
         * top. This is only required in landscape mode.
         */
        if (!!navigator.platform.match(/iPad/) && $html.is('.horizontal-page')) {
            var _getHorizontalPageHeight = getHorizontalPageHeight,
                IOS7PreventVerticalScroll = function () {
                    if ($(window).scrollTop() > 0) {
                        $('body').animate({ scrollTop: 0 }, 200);
                    }
                };

            getHorizontalPageHeight = function () {
                if ($window.height() == 692) {
                    return window.innerHeight - $header.outerHeight() - $footer.outerHeight();
                }
                return _getHorizontalPageHeight();
            };

            $document.on('scroll', _.debounce(IOS7PreventVerticalScroll, 100));
            $window.on('orientationchange.ios7-safari-bug.fluxus', function () {
                setTimeout(function () {
                    if ($window.height() == 692) {
                        IOS7PreventVerticalScroll();
                    }
                }, 200);
            });
        }

        $('.horizontal-page').each(function () {

            var resizer = function () {

                var windowWidth = $window.width(),
                    windowHeight = $window.height(),
                    // The header is position:fixed we have to calculate the offset for main page dynamically.
                    headerHeight = $header.outerHeight();
                    footerHeight = $footer.outerHeight();

                // If we are on a small screen
                if (windowWidth <= 480) {

                    if ($html.is('.no-scroll')) {
                        $main.css({
                            height: windowHeight - headerHeight,
                            top: 0
                        });
                    } else {
                        $main.css({
                            height: 'auto',
                            top: 0
                        });
                    }

                } else {

                    $main.css({
                        height: getHorizontalPageHeight(),
                        top: headerHeight
                    });

                }

            };

            $window.on('resize.horizontal-page.fluxus', _.debounce(resizer));
            resizer();

            $window.on('orientationchange.horizontal-page.fluxus', function () {
                setTimeout(resizer, 10);
            });

            $main.transition({
                opacity: 1
            }, 100);

        });

        /**
         * General size adjustments on window resize.
         */
        pageResizer = function () {

            /**
             * Update tinyscrollbar values.
             */
            $scrollContainer.each(function () {
                var $t = $(this),
                    tsb = $t.data('tsb');

                $t.find('.scrollbar, .track').css('height', $t.height());
                tsb && tsb.update();
            });


            if ($window.width() <= 768) {

                // Initialize mobile menu only if we have a small sceen size.
                if (!mobileNav) {

                    // Make mobile menu item array.
                    var $siteNavigation = $('.site-navigation'),
                        $mobileNavItems = $siteNavigation.find('a').filter(function () {

                            var $t = $(this),
                                level = $t.parents('ul').length;

                            $t.data('level', level);

                            if (level == 1) {
                                return true;
                            } else {
                                if ($t.closest('.current-menu-item, .current_page_ancestor').length) {
                                    return true;
                                }
                            }
                            return false;

                        });

                    /**
                     * Initialize mobile menu.
                     */
                    mobileNav = new MobileNav($mobileNavItems, {
                        openButtonTitle: $siteNavigation.data('menu'),
                        active: $siteNavigation.find('.current-menu-item > a')
                    });

                }

            }

            /**
             * Trigger vertical center plugin.
             */
            setTimeout(function () {
                $('.js-vertical-center').verticalCenter();
            }, 100);

        };

        $window.on('resize.page-resizer.fluxus', _.debounce(pageResizer));
        pageResizer();

        /**
         * Arrows and mousewheel navigation plugin.
         */
        globalNav = new Navigation({
            onSetItems: function () {
                this.$items.length && $navTip.show();
            }
        });

        /**
         * Full page slider
         */
        $('.slider').each(function () {

            var $slider = $(this),
                slider;

            $slider.fluxusSlider({
                    onNextSlide: function () {
                        globalNav.options.onNextItem();
                    },
                    onPreviousSlide: function () {
                        globalNav.options.onPreviousItem();
                    }
                });

            slider = $slider.data('slider');

            slider.slideCount > 1 && $navTip.show();

            globalNav.disableKeyboard();

            $keyRight.click(function (e) {
                slider.next();
                e && e.preventDefault();
            });

            $keyLeft.click(function (e) {
                slider.previous();
                e && e.preventDefault();
            });

        });


        /**
         * Appreciate plugin
         */
        var $appreciate = $('.btn-appreciate');
        $appreciate.appreciate();


        /**
         * Sharrre plugin
         */
        $('#sharrre-footer').each(function () {

            var $el = $(this),
                services = {},
                buttonsTitle = $el.data('buttons-title');

            if (!$el.data('services')) {
                return;
            }

            // retrieve social networks from DOM element.
            $.each($el.data('services').split(','), function () {
                services[this] = true;
            });

            $el.sharrre({
                share: services,
                buttonsTemplate: buttonsTitle ? '<b>' + buttonsTitle + '<a href="#" class="close"></a></b>' : '',
                urlCurl: $el.data('curl'),
                template: '<b class="share">{title}</b>' +
                          '<span class="counts">' +
                            (services.facebook ? '<b class="count-facebook">{facebook}</b>' : '') +
                            (services.twitter ?'<b class="count-twitter">{twitter}</b>' : '') +
                            (services.googlePlus ?'<b class="count-plus">{plus}</b>' : '') +
                          '</span>',
                render: function(self, options) {
                    var html = this.template.replace('{title}', options.title);
                    html = html.replace('{facebook}', options.count.facebook);
                    html = html.replace('{twitter}', options.count.twitter);
                    html = html.replace('{plus}', options.count.googlePlus);
                    $(self.element).html(html);
                    $el.show();
                }
            });

        });

        $('#sharrre-project').each(function () {

            var $el = $(this),
                services = {},
                buttonsTitle = $el.data('buttons-title');

            if (!$el.data('services')) {
                return;
            }

            // retrieve social networks from DOM element.
            $.each($el.data('services').split(','), function () {
                services[this] = true;
            });

            $el.sharrre({
                share: services,
                buttonsTemplate: buttonsTitle ? '<div class="arrow"></div><b>' + buttonsTitle + '<a href="#" class="close"></a></b>' : '',
                urlCurl: $el.data('curl'),
                template: '<span class="icon"></span><div class="box">' +
                            '<a class="share" href="#">{title}</a>' +
                            '<b class="count-total">{total}</b>' +
                          '</div>',
                render: function(self, options) {
                    var total = options.shorterTotal ? self.shorterTotal(options.total) : options.total,
                        html = this.template.replace('{title}', options.title).replace('{total}', total);
                    $(self.element).html(html);
                    $el.css('display', 'inline-block');
                },
                afterLoadButtons: function () {
                    var index = 0,
                        $buttons = this.$el.find('.button'),
                        count = $buttons.each( function () {
                                    index++;
                                    $(this).addClass('button-' + index);
                                }).length;
                    this.$el.addClass('social-services-' + count);
                }
            });

        });



        /**
         * Fixes menu issue, when popup is outside the screen.
         */
        $('.site-navigation .has-children').hover(function () {

            var $submenu = $(this).children('.sub-menu');
            if ($submenu.length) {

                // if popup is outside the screen, then align it by the right side of the screen.
                if ($submenu.offset().left + $submenu.outerWidth() - $(document).scrollLeft() > $window.width()) {
                    $submenu.addClass('sub-menu-right');
                }

            }

        }, function () {

            $(this).children('.sub-menu').removeClass('sub-menu-right');

        });


        /**
         * If our page has a horizontal layout.
         */
        if ($html.is('.horizontal-page')) {

            /**
             * Enable tinyscrollbar plugin.
             */
            $scrollContainer.tinyscrollbar({
                axis: 'y'
            });

            /**
             * Enable keyboard navigation.
             */
            globalNav.options.onNextItem = function () {
                $keyRight.addClass('flash');
                setTimeout(function () {
                    $keyRight.removeClass('flash');
                }, 200);
            };

            globalNav.options.onPreviousItem = function () {
                $keyLeft.addClass('flash');
                setTimeout(function () {
                    $keyLeft.removeClass('flash');
                }, 200);
            };

            $keyRight.click(function (e) {
                globalNav.nextItem();
                e && e.preventDefault();
            });

            $keyLeft.click(function (e) {
                globalNav.previousItem();
                e && e.preventDefault();
            });

        }

根據Inluxe Fluxus模板的作者,發布了以下修復程序可以解決此問題。

通過修改js / main.js中的以下代碼行

if (!!navigator.platform.match(/iPad/)) {

對此

if (!!navigator.platform.match(/iPad/) && $html.is('.horizontal-page')) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM