আইফোনটিতে ওরিয়েন্টেশন পরিবর্তনে আমি কীভাবে কোনও ওয়েব অ্যাপ্লিকেশনটির স্কেল / জুম পুনরায় সেট করব?


96

আমি যখন আমার অ্যাপ্লিকেশনটি প্রতিকৃতি মোডে শুরু করি তখন এটি ঠিকঠাক কাজ করে। তারপরে আমি ল্যান্ডস্কেপে ঘোরালাম এবং এটি ছোট হয়ে গেল। ল্যান্ডস্কেপ মোডের জন্য এটি সঠিকভাবে স্কেল করার জন্য আমাকে কোনও কিছুর উপরে দুবার দুবার আলতো চাপতে হবে, প্রথমে সমস্ত দিক থেকে জুম করতে হবে (সাধারণ ডাবল ট্যাপ আচরণ) এবং আবার সমস্ত উপায় জুম করতে হবে (আবার, সাধারণ ডাবল ট্যাপ আচরণ) । যখন এটি জুম হয়ে যায়, তখন এটি ল্যান্ডস্কেপ মোডের জন্য সঠিক নতুন স্কেলে জুম করে।

প্রতিকৃতিতে ফিরে যাওয়া আরও ধারাবাহিকভাবে কাজ করছে বলে মনে হয়; এটি, এটি জুমটি পরিচালনা করে যাতে ওরিয়েন্টেশনটি প্রতিকৃতিতে পরিবর্তিত হলে স্কেলটি সঠিক হয়।

আমি চেষ্টা করতে চাই যে এটি কোনও বাগ কিনা? বা এটি যদি জাভাস্ক্রিপ্টের সাথে ঠিক করা যায় এমন কিছু হয়?

ভিউপোর্ট মেটা সামগ্রীর সাথে, আমি প্রাথমিক-স্কেলটি 1.0 এ সেট করছি এবং আমি ন্যূনতম বা সর্বোচ্চ স্কেল সেট করছি না (আমি চাই না)। আমি প্রস্থটি ডিভাইস-প্রস্থে সেট করছি।

কোন ধারনা? আমি জানি যে এটির একটি অবিরাম সমস্যা বলে মনে হচ্ছে সমাধানের জন্য অনেক লোক কৃতজ্ঞ হবে।


4
একটি নিখুঁত সমাধান: জাভাস্ক্রিপ্ট নেই! stackoverflow.com/a/8727440/805787
Steeven

উত্তর:


89

জেরেমি কিথ ( @ অ্যাডাক্টিও ) এর ব্লগ ওরিয়েন্টেশন এবং স্কেলে এর জন্য একটি ভাল সমাধান রয়েছে

মার্কআপে সর্বাধিক-স্কেল সেট না করে মার্কআপকে স্কেলেবল রাখুন।

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

তারপরে যখন আপনি এই স্ক্রিপ্টটি দিয়ে আবার স্কেলাবিলিটিটি মঞ্জুর করবেন তখন অঙ্গভঙ্গি স্টার্ট না হওয়া পর্যন্ত লোডে জাভাস্ক্রিপ্টের সাথে স্কেলাবিলিটি অক্ষম করুন :

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);
    }
}

22-12-2014 আপডেট করুন:
একটি আইপ্যাড 1 এ এটি কাজ করে না, এটি ইভেন্টলিস্টারে ব্যর্থ। আমি খুঁজে পেয়েছি যে অপসারণগুলি দূর .bodyকরে:

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

4
অবশ্যই এটি জুম অক্ষম করার চেয়ে ভাল ?! আমি এখনও খুঁজে পেয়েছি সেরা ফিক্স :)
ড্যানওয়েলম্যান

হুম, এটি এখনও জুম করার ক্ষমতা অক্ষম করে। কারও কি এমন সহজ সমাধান আছে যা এটি করে না?
ব্র্যাড সুইডফেইজার

এটি কাজ করে, তবে আমি লক্ষ্য করেছি যে সমস্যাটি আবার শুরু হয় যদি আমি চিমটি-জুম অঙ্গভঙ্গি ব্যবহার করি এবং তারপরে স্ক্রিনটি ঘোরান। কীভাবে এটি ঠিক করবেন তা নিশ্চিত নন।
নিলেশ

4
এটা কাজ করে। তবে, আমি লক্ষ করেছি যে জুমটি করতে ব্যবহারকারীকে দু'বার খোলা চিমটি করতে হবে। আমি এটি অনুমান করছি কারণ maximum-scale=1.0অঙ্গভঙ্গিটি শুরু হওয়ার পরে কার্যকর থাকে। এই সমাধানের জন্য কোনো উপায় আছে কি?
ল্যান্ডনশ্রপ্প

4
এটি 2 কারণে কাজ করে না: 1) এটি অঙ্গভঙ্গি স্টার্ট 1 নম্বরটি অক্ষম করে, যার ফলে ব্যবহারকারীকে দু'বার ইশারা করতে হবে। 2) এটি ব্যবহারকারীর প্রথম অঙ্গভঙ্গি দ্বিগুণ হওয়ার পরে এটি ভেঙে যায়, তাই ব্যবহারকারী যদি কখনও ইশারা না করেন তবে এটি সত্যিই কাজ করে। - প্রত্যেকের নীচে অ্যান্ড্রু অ্যাশব্যাচারের সমাধানটি দেখতে হবে। এটা সত্যিই কাজ করেছে.
tmsimont

18

স্কট জেহেল একটি দুর্দান্ত সমাধান নিয়ে এসেছিলেন যা অ্যাক্সিলোমিটারটি ওরিয়েন্টেশন পরিবর্তনের প্রত্যাশার জন্য ব্যবহার করে। এই সমাধানটি অত্যন্ত প্রতিক্রিয়াশীল এবং জুম অঙ্গভঙ্গিতে হস্তক্ষেপ করে না।

https://github.com/scottjehl/iOS- ওরিয়েন্টেশন বিনিময়- ফিক্স

এটি কীভাবে কাজ করে: কখন কোনও ওরিয়েন্টেশন পরিবর্তন হতে চলেছে তা অনুমান করতে ডিভাইসের অ্যাকসিলোমিটার শুনে এই ফিক্সটি কাজ করে। এটি যখন একটি ওরিয়েন্টেশন পরিবর্তন আসন্ন বলে মনে করে, স্ক্রিপ্টটি ব্যবহারকারী জুমিংকে অক্ষম করে, জুমিং অক্ষম করে ওরিয়েন্টেশন পরিবর্তনটি সঠিকভাবে ঘটতে দেয়। স্ক্রিপ্টটি আবার জুম পুনরুদ্ধার করে যখন ডিভাইসটি খাড়া দিকে ঘনিষ্ঠ হয়, বা এর অবস্থান পরিবর্তন হওয়ার পরে। এই পৃষ্ঠাটি ব্যবহারের সময় ব্যবহারকারীর জুমিং কখনই অক্ষম থাকে না।

সংক্ষিপ্ত উত্স:

/*! 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);

চমৎকার! দেখতে একটি মার্জিত সমাধানের মতো।
এলিজাবেথ

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত !!!! আমি আশা করি উপরের সমাধানগুলিতে এক ঘন্টা অপচয় করার আগে আমি এটি প্রথম দেখেছি :)
tmsimont

4
আরও পরীক্ষার পরে এটি এক ধরনের অবিশ্বাস্য সমাধান :( এটি বেমানান, এবং কোডটি দেখার পরে আমি দেখতে পাচ্ছি কেন ... সংজ্ঞায়িত আন্দোলনের "প্রান্তিক" সর্বদা পৌঁছায় না, বিশেষত যদি আপনি আইপ্যাড ধরে রাখেন
ঘোরার

যে কেউ ঘূর্ণায়মান লক ব্যবহার করে তাদের পক্ষে বাজে পরিণতি হতে পারে ... তারা একটি নির্দিষ্ট কোণে ফোনটি ধরে রাখতে পারে এবং জুম করার ক্ষমতা হারাতে পারে - ব্যবহারকারীর কোনও ধারণা নেই কেন
1owk3y

14

আমার একই সমস্যা ছিল এবং সর্বোচ্চ স্কেল = 1.0 সেট করা আমার পক্ষে কাজ করেছিল।

সম্পাদনা: মন্তব্যে উল্লিখিত হিসাবে এটি সামগ্রীটি প্রস্থ-রেজোলিউশনকে ছাড়িয়ে গেলে ব্যবহারকারী জুমকে অক্ষম করে। যেমনটি উল্লেখ করা হয়েছে, এটি বুদ্ধিমান নাও হতে পারে। এটি কিছু ক্ষেত্রেও পছন্দসই হতে পারে।

ভিউপোর্ট কোড:

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

সুন্দর সমাধান। ওরিয়েন্টেশন পরিবর্তনের মাধ্যমে পৃষ্ঠাটিকে একটি ধ্রুবক জুম স্তরে (ডিভাইসের প্রস্থের সাথে তুলনামূলক) রেখে একটি ভাল কাজ করে Does এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ!
লুক স্টিভেনসন

17
ক্ষতিটি হ'ল অক্ষম ব্যবহারকারীরা আপনার সাইটে জুম করতে পারবেন না!
জেস জ্যাকবস

আমি লক্ষ্য করেছি যে এই সমস্ত পদ্ধতি মিডিয়া-কোয়েরি ভিত্তিক সিএসএসকে সঠিকভাবে নতুন ডিভাইসের প্রস্থ নিবন্ধন করা থেকে বিরত বলে মনে করছে (উদা: @ মিডিয়া সমস্ত এবং (সর্বাধিক প্রস্থ: 479px)
মায়াভারগুলি

4
ব্যবহারকারী জুম হত্যা খুব খারাপ ধারণা। নীচে অ্যান্ড্রু অ্যাশব্যাকার এর সমাধান দেখুন
tsimimont

আইফোন সম্পর্কে নিশ্চিত নন, তবে আইপ্যাডে এটি সমস্যার সমাধান করে না, ব্রাউজারটি ওরিয়েন্টেশন পরিবর্তনের সময় জুম করলে ম্যানুয়ালি জুম আউট করতে সক্ষম হয় না it
আলেজো

3

ভিউপোর্টে আপনার প্রস্থ সেট থাকলে:

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

এবং তারপরিবর্তনটি পরিবর্তন করুন এটি এলোমেলোভাবে কখনও কখনও জুম হবে (বিশেষত আপনি যদি স্ক্রিনে টানছেন) এটি ঠিক করতে এখানে আমি প্রস্থ স্থাপন করবেন না:

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

এটি জুমটি যা কিছু ঘটে তা স্থির করে তারপরে আপনি উইন্ডো.অরিয়েন্টেশনেশন ইভেন্টটি ব্যবহার করতে পারেন বা আপনি যদি প্ল্যাটফর্মটি স্বতন্ত্র ( টেস্টিংয়ের জন্য কার্যকর) উইন্ডো . innerwidth পদ্ধতিতে ব্যবহার করতে চান ।


1

মোবাইল সাফারি বস্তুটিতে orientationchangeইভেন্টটিকে সমর্থন করে window। দুর্ভাগ্যক্রমে জাভাস্ক্রিপ্টের মাধ্যমে সরাসরি জুম নিয়ন্ত্রণের কোনও উপায় বলে মনে হচ্ছে না। সম্ভবত আপনি গতিশীলভাবে metaট্যাগটি লিখে / পরিবর্তন করতে পারবেন যা ভিউপোর্টটি নিয়ন্ত্রণ করে - তবে আমি সন্দেহ করি যে এটি কাজ করবে, এটি কেবল পৃষ্ঠার প্রাথমিক অবস্থাকে প্রভাবিত করে। সম্ভবত আপনি এই ইভেন্টটি CSS ব্যবহার করে আপনার সামগ্রীটিকে পুনরায় আকার দিতে ব্যবহার করতে পারেন। শুভকামনা!


4
ধন্যবাদ! হ্যাঁ, আমি মেটা ট্যাগ ভিউপোর্টের মানগুলিকে পরিবর্তন করার চেষ্টা করেছি এবং এটি কিছুই করেনি। আমার কাছে মনে হচ্ছে আপনি ল্যান্ডস্কেপে ঘোরালে আপনি স্কেলটি ধরে রাখতে এটি সঠিকভাবে জুম করতে চান যাতে পৃষ্ঠাটি সাফারি উইন্ডোতে ফিট করে। এটা আমার কাছে খুব অদ্ভুত বলে মনে হচ্ছে এটি ডিফল্ট আচরণ নয়!
এলিজাবেথ


1

আমি আমার প্রকল্পে এই ফাংশন ব্যবহার করছি।

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;
}

সুতরাং কেবল অ্যাডভেন্টলিস্টনার:

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

0

নেটিভ আইওএস জুম অক্ষম করে এবং এর পরিবর্তে জাভাস্ক্রিপ্টে জুম কার্যকারিতা বাস্তবায়নের মাধ্যমে আমি একটি নতুন কাজের সন্ধান পেয়েছি other

জুম / ওরিয়েন্টেশন সমস্যার বিভিন্ন অন্যান্য সমাধানের একটি দুর্দান্ত পটভূমি হলেন সেরজিও লোপস: প্রতিকৃতিতে ওরিয়েন্টেশন পরিবর্তনের জন্য বিখ্যাত আইওএস জুম বাগের সমাধান

<!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>

এটি উন্নত করা যেতে পারে, তবে আমার প্রয়োজনের জন্য এটি আমার দেখা অন্যান্য সমস্ত সমাধানগুলির মধ্যে ঘটে যাওয়া বড় ধরনের ঘাটতিগুলি এড়িয়ে চলে। এখন পর্যন্ত আমি কেবল এটি iOS4 সহ একটি আইপ্যাড 2 এ মোবাইল সাফারি ব্যবহার করে পরীক্ষা করেছি।

ফোকাস () / অস্পষ্টতা () জুম কার্যকারিতার মাঝে মাঝে লকআপ প্রতিরোধের জন্য একটি কাজ যা অরিয়েন্টেশন পরিবর্তন করার পরে এবং কয়েকবার জুম করার পরে ঘটতে পারে।

ডকুমেন্ট.বডি.স্টাইল সেট করা একটি পূর্ণ স্ক্রিন পুনরায় রঙ করার জন্য বাধ্য করে, যা মাঝে মাঝে মাঝে মাঝে এমন সমস্যা এড়িয়ে যায় যেখানে জুমের পরে পুনরায় রঙটি খারাপভাবে ব্যর্থ হয়।


0

এলিজাবেথ আপনি মেটাট্যাগে "আইডি" বৈশিষ্ট্য যুক্ত করে গতিশীলভাবে ভিউপোর্ট সামগ্রী পরিবর্তন করতে পারেন:

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

তারপরে আপনি জাভাস্ক্রিপ্ট দ্বারা কল করতে পারেন:

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

আপনি যদি জুমটি বা ভিউপোর্ট পরিবর্তন করতে চান তবে @ ব্রিজেটসউইউউইউভিউতে থাকা সাবউভি স্ক্রোলভিউটি ডায়নামিকভাবে ব্যবহার করতে পারেন। আমি অন্যান্য থ্রেডে একটি নমুনা স্নিপেট যুক্ত করেছি: লিঙ্ক
এম পেনাডেস

4
@ ইলিশাবেথ এটি আপনার পক্ষে কাজ করে? আমার জন্য ল্যান্ডস্কেপ মোডে স্যুইচ করার সময় এটি জুমটিকে পুনরায় সেট করে না।
উদাহরণস্বরূপ আমার

0

এটি করার আরও একটি উপায় এখানে রয়েছে যা ভালভাবে কাজ করছে বলে মনে হচ্ছে।

  1. ভিউপোর্টকে স্কেল = 1 এ সীমাবদ্ধ রাখতে মেটা ট্যাগ সেট করুন, যা জুমিং প্রতিরোধ করে:

    <মেটা নাম = "ভিউপোর্ট" সামগ্রী = "প্রস্থ = ডিভাইস-প্রস্থ, প্রাথমিক-স্কেল = 1, ন্যূনতম-স্কেল = 1, সর্বোচ্চ-স্কেল = 1">

  2. জাভাস্ক্রিপ্ট সহ, জুমিংয়ের অনুমতি দেওয়ার জন্য মেটা ট্যাগটি 1/2 সেকেন্ড পরে পরিবর্তন করুন:

    সেটটাইমআউট (ফাংশন () {ডকুমেন্ট.কোয়ারী নির্বাচনকারী ("মেটা [নাম = ভিউপোর্ট]") set

  3. আবার জাভাস্ক্রিপ্ট সহ, ওরিয়েন্টেশন পরিবর্তনে, পৃষ্ঠাটি পুনরায় লোড করুন:

    উইন্ডো.অনোরিয়েন্টেশন বিনিময় = ফাংশন () {window.location.reload ();};

প্রতিবার আপনি যখন ডিভাইসটি পুনরায় পুনঃস্থাপন করেন, পৃষ্ঠাটি প্রথমে জুম ছাড়াই পুনরায় লোড হয়। তবে 1/2 সেকেন্ড পরে, জুম করার ক্ষমতা পুনরুদ্ধার করা হয়েছে।


6
একটি প্রশ্ন জিজ্ঞাসা করার 5 বছর পরে তার উত্তর দেওয়া হ'ল .. দুর্ভাগ্যক্রমে 2015 সালে ওয়েব কীভাবে এটি কাজ করে না the ব্যবহারকারী তার ডিভাইসটি ঘোরালে আপনি পৃষ্ঠাটি পুনরায় লোড করবেন না।
পিয়েরে

0

খুব সহজেই বাস্তবায়িত একটি ফিক্স পেয়েছে। ফর্মটি সম্পূর্ণ হওয়ার সাথে সাথে একটি পাঠ্যের উপাদানটিতে ফোকাস সেট করুন যার ফন্টের আকার 50px রয়েছে। পাঠ্যের উপাদানটি গোপন থাকলে এটি কাজ করছে বলে মনে হচ্ছে না তবে উপাদান উপাদানগুলির কোনও বৈশিষ্ট্য যাতে অস্বচ্ছতা না থাকে সেট করে এই উপাদানটি গোপন করা সহজেই সম্পন্ন হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.