Как включить масштабируемость пользователем (свойство области просмотра) после его отключения?

Я создал приложение для Android с помощью Phonegap. Я хочу иметь фиксированный div на одной странице и увеличивать масштаб на другой странице.

Я использую jquery mobile 1.2.0, Jquery 1.8.2, Phonegap 2.0.0 и Android 2.2.

Мой код:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">

<title>My Phonegap Application</title>

<link rel="stylesheet" href="./lib/jquery.mobile-1.2.0.css" />
<script src="./lib/jquery-1.8.2.js"></script>
<script src="./lib/jquery.mobile-1.2.0.js"></script>

<script src="./lib/cordova-2.0.0.js" type="text/javascript"></script>

<meta id="viewport" name="viewport" content="initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, width=device-width, height=device-height, user-scalable=no, target-densitydpi=device-dpi" />

<script>
    function change_page(){
        $("#viewport").attr("content", "initial-scale=1, maximum-scale=2, minimum-scale=0.5, width=device-width, height=device-height, user-scalable=yes, target-densitydpi=device-dpi");
        $.mobile.changePage( "#pageImage", { transition: "slideup"} );
    }
</script>

<style>
    .fixe {
        position: fixed;
        bottom: 0;
        z-index: 5000;
        margin: 0;
        padding: 0;
        height: 50px;
        width: 100%;
    }

    img {
        height: 100%;
        width: 100%;
    }
</style>

</head>

<body>

<div data-role="page" id="pageHome">
    <div data-role="content" data-theme="c">
        <button id="switchPage" onClick='change_page();'>switchpage</button>
        
    <p>
        Et quia Mesopotamiae tractus omnes crebro inquietari sueti praetenturis et stationibus servabantur agrariis, laevorsum flexo itinere Osdroenae subsederat extimas partes, novum parumque aliquando temptatum commentum adgressus. quod si impetrasset, fulminis modo cuncta vastarat. erat autem quod cogitabat huius modi.
        
        Quanta autem vis amicitiae sit, ex hoc intellegi maxime potest, quod ex infinita societate generis humani, quam conciliavit ipsa natura, ita contracta res est et adducta in angustum ut omnis caritas aut inter duos aut inter paucos iungeretur.
        
        Horum adventum praedocti speculationibus fidis rectores militum tessera data sollemni armatos omnes celeri eduxere procursu et agiliter praeterito Calycadni fluminis ponte, cuius undarum magnitudo murorum adluit turres, in speciem locavere pugnandi. neque tamen exiluit quisquam nec permissus est congredi. formidabatur enim flagrans vesania manus et superior numero et ruitura sine respectu salutis in ferrum.
        
        Ergo ego senator inimicus, si ita vultis, homini, amicus esse, sicut semper fui, rei publicae debeo. Quid? si ipsas inimicitias, depono rei publicae causa, quis me tandem iure reprehendet, praesertim cum ego omnium meorum consiliorum atque factorum exempla semper ex summorum hominum consiliis atque factis mihi censuerim petenda.
        
        Dum haec in oriente aguntur, Arelate hiemem agens Constantius post theatralis ludos atque circenses ambitioso editos apparatu diem sextum idus Octobres, qui imperii eius annum tricensimum terminabat, insolentiae pondera gravius librans, siquid dubium deferebatur aut falsum, pro liquido accipiens et conperto, inter alia excarnificatum Gerontium Magnentianae comitem partis exulari maerore multavit.
    </p>    
        
        <div class="fixe">
            <img id="fixedImage" src="./res/myfixedimg.png">
        </div>
    </div>
</div>

<div data-role="page" id="pageImage">
    <div data-role="content" data-theme="a">
        <img id="my_img" src="./res/myimg.png" width="671" height="811">
    </div>
</div>


</body>
</html>

С этим кодом фиксированный div работает, но невозможно увеличить вторую страницу. Как видите, я изменил масштабируемое пользователем свойство области просмотра в коде Javascript, но, похоже, это не вступило в силу.

Если вы удалите user-scalable=no в метатеге области просмотра, вы сможете увеличить вторую страницу, но div не будет исправлен.

Еще один тест

Я также попытался избавиться от масштабируемости пользователем в метатеге. На первой странице я добавил:

$("#viewport").attr("content", "user-scalable=no, initial-scale=1, maximum-scale=2, minimum-scale=0.5, width=device-width, height=device-height, target-densitydpi=device-dpi");
console.log($("#viewport").attr('content'));

В функции change_page:

$("#viewport").attr("content", "user-scalable=yes, initial-scale=1, maximum-scale=2, minimum-scale=0.5, width=device-width, height=device-height, target-densitydpi=device-dpi");
console.log($("#viewport").attr('content'));

Параметры окна просмотра в консоли в порядке, но даже если user-scalable=yes, он действует так, как если бы user-scalable = no.

Вывод

Я хочу иметь возможность увеличивать вторую страницу и иметь фиксированный div на первой. Кто-нибудь знает, как это сделать?

Заранее благодарны за Вашу помощь.


person Harunobu Madarame    schedule 31.10.2012    source источник


Ответы (1)


Быстрый ответ

Не отключайте user-scalable, а измените maximum-scale

Длинный ответ

Я знаю, что это было некоторое время назад, но если кто-то еще наткнется на эту проблему, это решение. ОП, надеюсь, ты это увидишь.

Если вы изначально установили user-scalable=no, то независимо от того, измените ли вы атрибут обратно на user-scalable=yes с помощью javascript, браузер Android проигнорирует его (не уверен в Firefox и т. д.)

Вместо этого вы должны установить начальный, минимальный и максимальный масштабы на 1,0 с возможностью масштабирования пользователем на 1, а затем, когда вы изменяете метатег, вы изменяете только максимальный масштаб на 2,0. См. пояснения ниже.

Исходное состояние

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

Исходное состояние

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=2.0, maximum-scale=1.0, user-scalable=1">

Заключение

Теперь вы можете изменять возможности масштабирования, играя с максимальным масштабом, всегда сохраняя значение масштабируемости пользователем. Обратите внимание, что по какой-то причине Firefox игнорирует этот обходной путь и позволяет пользователю изменять масштаб в любом случае. Это отстой, учитывая, что у Firefox для Android более 10 миллионов загрузок.

person puiu    schedule 05.06.2013
comment
Я не мог заставить это работать. У меня андроид 2.2. Подскажите, пожалуйста, какая у вас версия андроида? - person spiderplant0; 16.09.2013
comment
Это опечатка? Вы говорите minimum-scale=2.0. Вы хотели сказать maximum-scale=2.0? - person cherouvim; 21.02.2014
comment
Прошло некоторое время, когда я опубликовал этот вопрос, но спасибо за ваш ответ. - person Harunobu Madarame; 09.01.2015
comment
Практическое решение с несколькими строками кода. Я только что реализовал это с помощью лайтбокса и отлично работает. - person JohnA10; 03.08.2016