Масштабирование мобильных устройств JQuery - PullRequest
17 голосов
/ 23 июня 2011

Я использую JQuery Mobile, и у меня возникают проблемы с масштабированием с моего браузера на iPhone.

Когда я загружаю его в браузер (сафари), он сжимается и расширяется просто отлично. Однако, когда я загружаю его на свой iPhone, он не масштабируется. Это позволяет вам прокручивать влево и вправо, когда это не следует.

Есть ли что-то, что я должен добавить, чтобы уменьшить его, узнав, что это мобильное устройство.

Вот мой текущий HTML.

    <head>
        <title>Page Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="http://www.domain.com/css/jquery.mobile-1.0b1.min.css" />
        <link rel="stylesheet" href="http://www.domain.com/css/base.css" />
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js">

        </script>
        <script type="text/javascript" src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>
    </head>

    <body>

        <body>
            <!-- Start of first page -->
            <div data-role="page">
                <div data-role="header">
                    <div id="header">
                        <ul>
                            <li>
                                <div><a href="logout.php">Logout</a>
                                </div>
                            </li>
                            <li style="float:right;">
                                <div><a href="new.php">New</a>
                                </div>
                            </li>
                             <h1 align="center">Title</h1>

                        </ul>
                        <div id="clear"></div>
                    </div>
                </div>
                <!-- /header -->
                <div id="stream">
                    <div id="stream_story">
                        <ul style="width:100%">
                            <li>
                                <img src="" />
                            </li>
                            <li style="float:right;">></li>
                            <li style="width:75%;margin-bottom:10px;margin-left:5px;">Content
                                <br/><span>Content</span>
                            </li>
                        </ul>
                    </div>
                    <div id="clear"></div>
                    <hr/>
                </div>
                <!-- /content -->
            </div>
            <!-- /page -->
        </body>
    </body>

</html>

Ответы [ 2 ]

34 голосов
/ 23 июня 2011

У меня были проблемы с окном просмотра iPhone и JQuery-Mobile, в результате я нашел следующее решение.

  • Добавьте метатег, который устанавливает высоту и ширину для device-height / device-width (вы можете позволить пользователю изменять масштаб, изменив максимальный масштаб на значение, превышающее 1, однако в следующем примере масштабирование отключено. поверьте, Mobile Safari допускает значение до 10):

<meta name="viewport" content="height=device-height,width=device-width,initial-scale=1.0,maximum-scale=1.0" >

  • Когда пользователь меняет ориентацию на iPhone, я заметил странное поведение с изменением масштаба и добавлением пробела, поэтому я использовал следующий код:
    //check the navigator.userAgent string to detect if the user is using an iPhone
    if (navigator.userAgent.match(/iPhone/i)) {

        //cache the viewport tag if the user is using an iPhone
        var $viewport = $('head').children('meta[name="viewport"]');

        //bind an event handler to the window object for the orientationchange event
        $(window).bind('orientationchange', function() {
            if (window.orientation == 90 || window.orientation == -90 || window.orientation == 270) {

                //landscape
                $viewport.attr('content', 'height=device-width,width=device-height,initial-scale=1.0,maximum-scale=1.0');
            } else {

                //portrait
                $viewport.attr('content', 'height=device-height,width=device-width,initial-scale=1.0,maximum-scale=1.0');
            }

        //trigger an orientationchange event on the window object to initialize this code (basically in-case the user opens the page in landscape mode)
        }).trigger('orientationchange');
    }

Оператор if / then в обработчике событий проверяет, для какой ориентации пользователь изменился на (90, -90 и 270 - все значения, которые я видел для ландшафта), а строки $viewport.attr('content',... просто переключают высоту и значения ширины в теге области просмотра.

1 голос
/ 06 июня 2012

В Jquery Mobile 1.1.0, приведенный выше ответ, кажется, работает только в портретной ориентации. Я искал и нашел эту версию метатега, который (в моем случае) работал в обеих ориентациях, без необходимости какого-либо JavaScript:

<meta content="width=device-width, minimum-scale=1, maximum-scale=1" name="viewport">

(Указывает ширину устройства, но не высоту.)

Источник: http://www.wintellect.com/cs/blogs/rrobinson/archive/2011/07/25/how-to-scale-a-jquery-mobile-site-for-ios.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...