Масштабирование мобильных устройств JQuery
Я использую JQuery Mobile, и у меня возникают проблемы с масштабированием моего браузера на мой iPhone.
Когда я загружаю его в браузер (сафари), он сжимается и расширяется просто отлично. Однако, когда я загружаю его на свой iPhone, он не масштабируется. Он позволяет прокручивать влево и вправо, если это не так.
Есть ли что-то, что я должен добавить, чтобы он уменьшался, узнав, что это мобильное устройство.
Вот мой текущий html.
<head>
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="#" onclick="location.href='http://www.domain.com/css/jquery.mobile-1.0b1.min.css'; return false;" />
<link rel="stylesheet" href="#" onclick="location.href='http://www.domain.com/css/base.css'; return false;" />
<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>
Ответы
Ответ 1
У меня были проблемы с видовым экраном iPhone и JQuery-Mobile, в результате у меня появилось следующее решение.
- Добавьте метатег, который устанавливает высоту и ширину в ширину устройства/высоту устройства (вы можете позволить пользователю увеличивать масштаб, изменяя максимальную шкалу на что-то выше 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',...
просто переключают высоту и значения ширины в теге просмотра.
Ответ 2
В 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