Làm cách nào để đặt lại tỷ lệ / thu phóng của ứng dụng web khi thay đổi hướng trên iPhone?


96

Khi tôi khởi động ứng dụng của mình ở chế độ dọc, nó hoạt động tốt. Sau đó, tôi xoay ngang và nó được mở rộng. Để nó có tỷ lệ chính xác cho chế độ ngang, tôi phải nhấn đúp vào thứ gì đó hai lần, trước tiên để phóng to hết cỡ (hành vi nhấn đúp thông thường) và một lần nữa để thu phóng hết cỡ (lại là hành vi nhấn đúp thông thường) . Khi thu nhỏ, nó sẽ thu nhỏ đến đúng tỷ lệ MỚI cho chế độ ngang.

Chuyển về chế độ dọc dường như hoạt động ổn định hơn; có nghĩa là, nó xử lý thu phóng để tỷ lệ chính xác khi hướng thay đổi trở lại dọc.

Tôi đang cố gắng tìm hiểu xem đây có phải là lỗi không? hoặc nếu đây là thứ có thể sửa được bằng JavaScript?

Với nội dung meta cửa sổ xem, tôi đang đặt tỷ lệ ban đầu thành 1,0 và tôi KHÔNG đặt tỷ lệ tối thiểu hoặc tối đa (tôi cũng không muốn). Tôi đang đặt chiều rộng thành chiều rộng thiết bị.

Bất kỳ ý tưởng? Tôi biết rất nhiều người sẽ biết ơn nếu có một giải pháp vì nó dường như là một vấn đề dai dẳng.


1
Một giải pháp hoàn hảo: Không có javascript! stackoverflow.com/a/8727440/805787
Febven

Câu trả lời:


89

Jeremy Keith ( @adactio ) có một giải pháp tốt cho vấn đề này trên Định hướng và quy mô blog của anh ấy

Giữ cho Đánh dấu có thể mở rộng bằng cách không đặt tỷ lệ tối đa trong đánh dấu.

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

Sau đó, vô hiệu hóa khả năng mở rộng với javascript khi tải cho đến khi bắt đầu cử chỉ khi bạn cho phép khả năng mở rộng một lần nữa với tập lệnh này:

if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i)) {
    var viewportmeta = document.querySelector('meta[name="viewport"]');
    if (viewportmeta) {
        viewportmeta.content = 'width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0';
        document.body.addEventListener('gesturestart', function () {
            viewportmeta.content = 'width=device-width, minimum-scale=0.25, maximum-scale=1.6';
        }, false);
    }
}

Cập nhật ngày 22-12-2014:
Trên iPad 1, tính năng này không hoạt động, nó bị lỗi trên trình ghi sự kiện. Tôi thấy rằng việc xóa các .bodybản sửa lỗi đó:

document.addEventListener('gesturestart', function() { /* */ });

4
Chắc chắn điều này tốt hơn là tắt zoom ?! Việc sửa chữa tốt nhất mà tôi đã tìm thấy chưa :)
danwellman

Rất tiếc, điều này vẫn vô hiệu hóa khả năng thu phóng. Có ai có một giải pháp đơn giản mà không làm điều này?
Brad Swerdfeger 20/02/12

Nó hoạt động, tuy nhiên tôi quan sát thấy rằng sự cố bắt đầu lại nếu tôi sử dụng cử chỉ chụm-zoom và sau đó xoay màn hình. Không chắc chắn làm thế nào để sửa chữa nó.
Nilesh

3
Nó hoạt động. Tuy nhiên, tôi nhận thấy người dùng phải chụm mở hai lần để thu phóng. Tôi đoán điều này là do tác dụng maximum-scale=1.0vẫn có hiệu lực sau khi cử chỉ bắt đầu. Có cách nào để sửa lỗi này không?
LandonSchropp

3
Điều này không hoạt động vì 2 lý do: 1) nó vô hiệu hóa cử chỉ bắt đầu số 1, khiến người dùng cần phải cử chỉ hai lần. 2) nó bị vỡ sau khi người dùng nhân đôi cử chỉ đầu tiên, vì vậy nó thực sự chỉ hoạt động nếu người dùng không bao giờ cử chỉ. - mọi người hãy xem giải pháp của Andrew Ashbacher dưới đây. Nó thật sự có hiệu quả.
tmsimont

18

Scott Jehl đã đưa ra một giải pháp tuyệt vời sử dụng gia tốc kế để dự đoán những thay đổi về hướng. Giải pháp này rất nhạy và không can thiệp vào các cử chỉ thu phóng.

https://github.com/scottjehl/iOS-Orientationchange-Fix

Cách hoạt động: Bản sửa lỗi này hoạt động bằng cách lắng nghe gia tốc kế của thiết bị để dự đoán khi nào sắp xảy ra thay đổi hướng. Khi cho rằng sắp có thay đổi hướng, tập lệnh sẽ tắt tính năng thu phóng của người dùng, cho phép thay đổi hướng diễn ra đúng cách, với tính năng thu phóng bị tắt. Tập lệnh sẽ khôi phục thu phóng một lần nữa khi thiết bị được định hướng gần với hướng thẳng đứng hoặc sau khi hướng của nó đã thay đổi. Bằng cách này, tính năng thu phóng của người dùng không bao giờ bị tắt khi trang đang được sử dụng.

Nguồn thu nhỏ:

/*! A fix for the iOS orientationchange zoom bug. Script by @scottjehl, rebound by @wilto.MIT License.*/(function(m){if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1)){return}var l=m.document;if(!l.querySelector){return}var n=l.querySelector("meta[name=viewport]"),a=n&&n.getAttribute("content"),k=a+",maximum-scale=1",d=a+",maximum-scale=10",g=true,j,i,h,c;if(!n){return}function f(){n.setAttribute("content",d);g=true}function b(){n.setAttribute("content",k);g=false}function e(o){c=o.accelerationIncludingGravity;j=Math.abs(c.x);i=Math.abs(c.y);h=Math.abs(c.z);if(!m.orientation&&(j>7||((h>6&&i<8||h<8&&i>6)&&j>5))){if(g){b()}}else{if(!g){f()}}}m.addEventListener("orientationchange",f,false);m.addEventListener("devicemotion",e,false)})(this);

Đẹp! Có vẻ như một giải pháp thanh lịch.
Elisabeth

1
đây phải là câu trả lời được chấp nhận !!!! Tôi ước gì tôi thấy điều này trước khi lãng phí một giờ trên các giải pháp trên :)
tmsimont

1
sau khi thử nghiệm thêm, đây là một giải pháp không đáng tin cậy :( nó không nhất quán và sau khi xem qua mã, tôi có thể hiểu tại sao ... "ngưỡng" chuyển động được xác định không phải lúc nào cũng đạt được, đặc biệt nếu bạn đang cầm ipad ở một góc khi xoay
tmsimont

Có thể gây ra hậu quả tồi tệ cho bất kỳ ai sử dụng khóa xoay ... họ có thể giữ điện thoại ở một góc nhất định và mất khả năng thu phóng - người dùng sẽ không biết tại sao
1owk3y

14

Tôi đã gặp vấn đề tương tự và việc đặt quy mô tối đa = 1.0 đã phù hợp với tôi.

Chỉnh sửa: Như đã đề cập trong các nhận xét, điều này sẽ vô hiệu hóa tính năng thu phóng của người dùng trừ khi nội dung vượt quá độ phân giải chiều rộng. Như đã đề cập, điều này có thể không khôn ngoan. Nó cũng có thể được mong muốn trong một số trường hợp.

Mã khung nhìn:

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

Giải pháp tốt. Làm tốt công việc giữ trang ở mức thu phóng không đổi (so với chiều rộng của thiết bị) thông qua các thay đổi hướng. Cảm ơn vì đã chia sẻ nó!
Luke Stevenson

17
nhược điểm là người dùng bị vô hiệu hóa không thể phóng to trang web của bạn!
Jess Jacobs

Tôi nhận thấy rằng tất cả những phương pháp này dường như để ngăn chặn phương tiện truyền thông truy vấn dựa CSS từ đăng ký chiều rộng thiết bị mới đúng (ví dụ: @media tất cả và (max-width: 479px)
mheavers

2
giết người dùng zoom là một ý tưởng rất tồi. thấy giải pháp Andrew Ashbacher của bên dưới
tmsimont

Không chắc chắn về iPhone, nhưng trên iPad, điều này không giải quyết được vấn đề, nó chỉ ngăn người dùng có thể thu nhỏ theo cách thủ công khi trình duyệt phóng to khi thay đổi hướng.
Alejo

3

Nếu bạn đặt chiều rộng trong khung nhìn:

<meta name = "viewport" content = "width=device-width; initial-scale=1.0;
 maximum-scale=1.0;" />

Và sau đó thay đổi hướng, đôi khi nó sẽ phóng to ngẫu nhiên (đặc biệt nếu bạn đang kéo trên màn hình) để khắc phục điều này không đặt chiều rộng ở đây tôi đã sử dụng:

<meta id="viewport" name="viewport" content="initial-scale=1.0; user-scalable=0;
minimum-scale=1.0; maximum-scale=1.0" />

Điều này sẽ khắc phục sự cố thu phóng bất cứ điều gì xảy ra sau đó bạn có thể sử dụng sự kiện window.onorientationchange hoặc nếu bạn muốn nó độc lập với nền tảng (tiện cho việc thử nghiệm) thì phương thức window.innerWidth .


1

MobileSafari hỗ trợ orientationchangesự kiện trên windowđối tượng. Thật không may, dường như không có cách nào để điều khiển thu phóng trực tiếp thông qua JavaScript. Có lẽ bạn có thể tự động viết / thay đổi metathẻ điều khiển chế độ xem - nhưng tôi nghi ngờ điều đó sẽ hoạt động, nó chỉ ảnh hưởng đến trạng thái ban đầu của trang. Có lẽ bạn có thể sử dụng sự kiện này để thực sự thay đổi kích thước nội dung của mình bằng CSS. Chúc may mắn!


3
Cảm ơn! Có, tôi đã thử thay đổi động các giá trị cửa sổ xem thẻ meta và nó không làm gì cả. Đối với tôi, dường như nếu bạn xoay thành Phong cảnh, bạn muốn nó thu phóng chính xác để giữ tỷ lệ sao cho trang vừa với cửa sổ Safari. Có vẻ rất kỳ lạ đối với tôi rằng đây không phải là hành vi mặc định!
Elisabeth


1

Tôi đã sử dụng chức năng này trong dự án của mình.

function changeViewPort(key, val) {
    var reg = new RegExp(key, "i"), oldval = document.querySelector('meta[name="viewport"]').content;
    var newval = reg.test(oldval) ? oldval.split(/,\s*/).map(function(v){ return reg.test(v) ? key+"="+val : v; }).join(", ") : oldval+= ", "+key+"="+val ;
    document.querySelector('meta[name="viewport"]').content = newval;
}

vì vậy chỉ cần addEventListener:

if( /iPad|iPhone|iPod|Android/i.test(navigator.userAgent) ){
    window.addEventListener("orientationchange", function() { 
        changeViewPort("maximum-scale", 1);
        changeViewPort("maximum-scale", 10);
    }
}

0

Tôi đã tìm thấy một giải pháp mới, khác với bất kỳ giải pháp nào khác mà tôi đã thấy, bằng cách tắt tính năng thu phóng gốc của iOS và thay vào đó triển khai chức năng thu phóng trong JavaScript.

Nền tảng tuyệt vời về các giải pháp khác nhau cho vấn đề thu phóng / định hướng là của Sérgio Lopes: Bản sửa lỗi thu phóng nổi tiếng của iOS về thay đổi hướng thành dọc .

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" id="viewport" content="user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0" />
    <title>Robocat mobile Safari zoom fix</title>
    <style>
        body {
            padding: 0;
            margin: 0;
        }
        #container {
            -webkit-transform-origin: 0px 0px;
            -webkit-transform: scale3d(1,1,1);
            /* shrink-to-fit needed so can measure width of container http://stackoverflow.com/questions/450903/make-css-div-width-equal-to-contents */
            display: inline-block;
            *display: inline;
            *zoom: 1;
        }
        #zoomfix {
            opacity: 0;
            position: absolute;
            z-index: -1;
            top: 0;
            left: 0;
        }
    </style>
</head>

<body>
    <input id="zoomfix" disabled="1" tabIndex="-1">
    <div id="container">
        <style>
            table {
                counter-reset: row cell;
                background-image: url(http://upload.wikimedia.org/wikipedia/commons/3/38/JPEG_example_JPG_RIP_010.jpg);
            }
            tr {
                counter-increment: row;
            }
            td:before {
                counter-increment: cell;
                color: white;
                font-weight: bold;
                content: "row" counter(row) ".cell" counter(cell);
            }
        </style>
        <table cellspacing="10">
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
            <tr><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td><td>
        </table>
    </div>

    <script>
    (function() {
        var viewportScale = 1;
        var container = document.getElementById('container');
        var scale, originX, originY, relativeOriginX, relativeOriginY, windowW, windowH, containerW, containerH, resizeTimer, activeElement;
        document.addEventListener('gesturestart', function(event) {
            scale = null;
            originX = event.pageX;
            originY = event.pageY;
            relativeOriginX = (originX - window.pageXOffset) / window.innerWidth;
            relativeOriginY = (originY - window.pageYOffset) / window.innerHeight;
            windowW = window.innerWidth;
            windowH = window.innerHeight;
            containerW = container.offsetWidth;
            containerH = container.offsetHeight;
        });
        document.addEventListener('gesturechange', function(event) {
            event.preventDefault();
            if (originX && originY && event.scale && event.pageX && event.pageY) {
                scale = event.scale;
                var newWindowW = windowW / scale;
                if (newWindowW > containerW) {
                    scale = windowW / containerW;
                }
                var newWindowH = windowH / scale;
                if (newWindowH > containerH) {
                    scale = windowH / containerH;
                }
                if (viewportScale * scale < 0.1) {
                    scale = 0.1/viewportScale;
                }
                if (viewportScale * scale > 10) {
                    scale = 10/viewportScale;
                }
                container.style.WebkitTransformOrigin = originX + 'px ' + originY + 'px';
                container.style.WebkitTransform = 'scale3d(' + scale + ',' + scale + ',1)';
            }
        });
        document.addEventListener('gestureend', function() {
            if (scale && (scale < 0.95 || scale > 1.05)) {
                viewportScale *= scale;
                scale = null;
                container.style.WebkitTransform = '';
                container.style.WebkitTransformOrigin = '';
                document.getElementById('viewport').setAttribute('content', 'user-scalable=no,initial-scale=' + viewportScale + ',minimum-scale=' + viewportScale + ',maximum-scale=' + viewportScale);
                document.body.style.WebkitTransform = 'scale3d(1,1,1)';
                // Without zoomfix focus, after changing orientation and zoom a few times, the iOS viewport scale functionality sometimes locks up (and completely stops working).
                // The reason I thought this hack would work is because showing the keyboard is the only way to affect the viewport sizing, which forces the viewport to resize (even though the keyboard doesn't actually get time to open!).
                // Also discovered another amazing side effect: if you have no meta viewport element, and focus()/blur() in gestureend, zoom is disabled!! Wow!
                var zoomfix = document.getElementById('zoomfix');
                zoomfix.disabled = false;
                zoomfix.focus();
                zoomfix.blur();
                setTimeout(function() {
                    zoomfix.disabled = true;
                    window.scrollTo(originX - relativeOriginX * window.innerWidth, originY - relativeOriginY * window.innerHeight);
                    // This forces a repaint. repaint *intermittently* fails to redraw correctly, and this fixes the problem.
                    document.body.style.WebkitTransform = '';
                }, 0);
            }
        });
    })();
    </script>
</body>
</html>

Nó có thể được cải thiện, nhưng đối với nhu cầu của tôi, nó tránh được những nhược điểm lớn xảy ra với tất cả các giải pháp khác mà tôi đã thấy. Cho đến nay tôi mới chỉ thử nghiệm nó bằng Safari di động trên iPad 2 với iOS4.

Tiêu điểm () / mờ () là một giải pháp để ngăn chặn việc khóa chức năng thu phóng không thường xuyên có thể xảy ra sau khi thay đổi hướng và thu phóng một vài lần.

Việc đặt document.body.style buộc phải sơn lại toàn màn hình, điều này tránh các sự cố không liên tục trong đó sơn lại bị lỗi nặng sau khi thu phóng.


0

Elisabeth, bạn có thể thay đổi động nội dung chế độ xem bằng cách thêm thuộc tính "id" vào thẻ meta:

<meta name="viewport" id="view" content="user-scalable=yes, width=device-width minimum-scale=1, maximum-scale=1" />

Sau đó, bạn chỉ có thể gọi bằng javascript:

document.getElementById("view").setAttribute('content','user-scalable=yes, width=device-width, minimum-scale=1, maximum-scale=10');

@bridgestew nếu bạn muốn thay đổi chế độ thu phóng hoặc chế độ xem một cách tự động, hãy sử dụng chế độ xem cuộn phụ có trong chế độ xem uiwebview. Tôi đã thêm một snipet mẫu về chủ đề khác: liên kết
M Penades

4
@Elisabeth có hiệu quả với bạn không? Đối với tôi, nó không đặt lại thu phóng khi chuyển sang chế độ ngang.
instanceof me

0

Đây là một cách khác để làm điều đó, có vẻ hoạt động tốt.

  1. Đặt thẻ meta để hạn chế chế độ xem ở tỷ lệ = 1, ngăn cản việc thu phóng:

    <meta name = "viewport" content = "width = device-width, initial-scale = 1, Minim-scale = 1, Maximum-scale = 1">

  2. Với javascript, hãy thay đổi thẻ meta 1/2 giây sau để cho phép phóng to:

    setTimeout (function () {document.querySelector ("meta [name = viewport]"). setAttribute ('content', 'width = device-width, initial-scale = 1');}, 500);

  3. Một lần nữa với javascript, khi thay đổi hướng, hãy tải lại trang:

    window.onorientationchange = function () {window.location.reload ();};

Mỗi khi bạn định hướng lại thiết bị, trang sẽ tải lại, lúc đầu không có thu phóng. Nhưng 1/2 giây sau, khả năng thu phóng được khôi phục.


6
Trả lời một câu hỏi 5 năm sau khi nó được hỏi là một cái gì đó .. Thật không may, đây không phải là cách web hoạt động vào năm 2015. Bạn KHÔNG tải lại trang khi người dùng xoay thiết bị của mình.
Pierre

0

Đã tìm thấy một bản sửa lỗi rất dễ thực hiện. Đặt tiêu điểm thành phần tử văn bản có kích thước phông chữ là 50px khi hoàn thành biểu mẫu. Nó dường như không hoạt động nếu phần tử văn bản bị ẩn nhưng việc ẩn phần tử này được thực hiện dễ dàng bằng cách thiết lập các thuộc tính màu của phần tử để không có độ mờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.