আইপ্যাড ওয়েব অ্যাপ: সাফারিটিতে জাভাস্ক্রিপ্ট ব্যবহার করে ভার্চুয়াল কীবোর্ড সনাক্ত করুন?


147

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

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

আমার পরীক্ষায় কীবোর্ডটি কোনও ডিওএম উপাদানগুলির উচ্চতা বা স্ক্রোলহাইটকে প্রভাবিত করে না এবং আমি কোনও মালিকানাধীন ইভেন্ট বা বৈশিষ্ট্য খুঁজে পাইনি যা কীবোর্ডটি দৃশ্যমান কিনা তা নির্দেশ করে।


1
এইচএম, আকর্ষণীয় সমস্যা। কীবোর্ড সমর্থন সম্পর্কিত কোনও বিশেষ অবজেক্ট আছে কিনা তা দেখার জন্য আইপ্যাডের সাফারিতে "উইন্ডো" এর অবজেক্টগুলির উপর পুনরাবৃত্তি করার চেষ্টা করুন।
ডেভিড মারডোক

@ ডেভিড যা কাজ করবে না, কীবোর্ডটি জাভাস্ক্রিপ্ট "উইন্ডো" নয়।
কেনেটিএম

2
@KennyTM। Duh। তবে উইন্ডোর যে কোনও অবজেক্টে অন-স্ক্রিন কীবোর্ড প্রদর্শনের সাথে সম্পর্কিত পতাকা থাকতে পারে। এটি একটি শট মূল্য।
ডেভিড মারডোক

1
আমি চেষ্টা করেছিলাম। দুর্ভাগ্যক্রমে কিছুই পাইনি। কীবোর্ড দেখানোর আগে এবং পরে তিনটি স্তর গভীরতার সাথে উইন্ডোর সমস্ত বৈশিষ্ট্যের সাথে তুলনা করুন। পার্থক্যগুলির কোনওটিকেই কীবোর্ডের সূচক হিসাবে প্রাসঙ্গিক মনে হয়নি।
LKM

3
এর কি নতুন উত্তর আছে ??
ফ্রেমচার

উত্তর:


54

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

অন্যদিকে যদি কীবোর্ডটি দেখানো হয়, স্ক্রোলিং হঠাৎ করে কাজ করে। সুতরাং আমি স্ক্রোলটপ সেট করতে পারি, সাথে সাথে এর মানটি পরীক্ষা করতে এবং তারপরে এটি পুনরায় সেট করতে পারি। এখানে jQuery ব্যবহার করে কোডটিতে কীভাবে দেখা যাবে তা এখানে:

$(document).ready(function(){
    $('input').bind('focus',function() {
        $(window).scrollTop(10);
        var keyboard_shown = $(window).scrollTop() > 0;
        $(window).scrollTop(0);

        $('#test').append(keyboard_shown?'keyboard ':'nokeyboard ');
    });
});

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

আমি এটি একটি আইপ্যাডে পরীক্ষা করেছি এবং মনে হচ্ছে এটি ঠিকঠাক কাজ করবে।


আমার ওয়েব অ্যাপ্লিকেশানটিতে আমার একটি সমস্যা রয়েছে যেখানে ইনপুটটির উপর দৃষ্টি নিবদ্ধ করা হলে স্ক্রিনটি কিছুটা উপরে স্ক্রোল করে। আমি অন্যথায় স্ক্রোলিং অক্ষম করেছি, তবে এখনও এই স্ক্রোলগুলি। কোন ধারনা? ধন্যবাদ [ স্ট্যাকওভারফ্লো.com
অ্যান্ড্রু সামিউলসেন

আমি এটি এখনও চেষ্টা করি নি, তবে এটি আশাব্যঞ্জক বলে মনে হচ্ছে। .scrollTop(1)ঠিক পাশাপাশি কাজ করবে না এবং কম স্পষ্ট হবে?
থিংকিং

1
এটি খারাপ ধারণা ... কীবোর্ডটি ব্লুটুথ হতে পারে এবং ভার্চুয়াল প্রদর্শিত হতে পারে না।
TheSociableme

3
@ থি সোসিয়েবলমে: এই সমাধানের পুরো বিষয়টি হ'ল ব্লুটুথ কীবোর্ড সঠিকভাবে পরিচালনা করা। আপনি যদি ব্লুটুথ কীবোর্ডগুলি উপেক্ষা করেন, ভার্চুয়াল কীবোর্ডটি প্রদর্শিত হয়েছিল কিনা তা নির্ধারণ করা সহজ হবে, যেহেতু আপনি কেবল কোনও ক্ষেত্রটির ফোকাস আছে কিনা তা পরীক্ষা করতে পারেন।
LKM

5
@ ফ্রেফচার: একটি বিস্তৃত ব্যাখ্যা জানেন না (আপনি যদি গবেষণা করে একটি লেখেন তবে আমি এটি পড়তে পছন্দ করব)। দুটি প্ল্যাটফর্ম তাদের মূল ব্রাউজারগুলিতে অনস্ক্রিন কীবোর্ডগুলি খুব আলাদাভাবে পরিচালনা করে। অ্যান্ড্রয়েড ক্রোম কীবোর্ডের জন্য জায়গা তৈরি করতে ভিউপোর্টের উচ্চতা সঙ্কুচিত করে, তাই কীবোর্ডটি দেখানো হলে পৃষ্ঠাটির আকার পরিবর্তন হয়। আইওএস সাফারি কীবোর্ডের সাহায্যে পৃষ্ঠাটি ওভারলে করে (পৃষ্ঠার আকার একই থাকে) এবং কীভাবে স্ক্রোলিং কাজ করে তা পরিবর্তন করে। সাফারি উভয়ই পৃষ্ঠার ভিউপোর্টের অভ্যন্তরে স্ক্রোল করে এবং একই সাথে ভিউপোর্টটি সরানো হয়, নিশ্চিত করে যে সমস্ত পৃষ্ঠায় নীচে স্ক্রল করার সময় পৃষ্ঠার নীচে কীবোর্ডের উপরে রয়েছে is
LKM

32

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

 document.addEventListener('focusout', function(e) {window.scrollTo(0, 0)});

এই স্নিপেট ব্যতীত, অ্যাপ্লিকেশন ধারক পৃষ্ঠার রিফ্রেশ না হওয়া পর্যন্ত আপ-স্ক্রোল অবস্থানে থাকবে।


1
সেরা
সমাধানটি


1
কীবোর্ড উন্মুক্ত শনাক্ত করার জন্য আপনি 'ফোকাসিন' সংস্করণও ব্যবহার করতে পারেন।
এ.টেটিন

15

কিছুটা আরও ভাল সমাধান হ'ল বিভিন্ন ইনপুট ক্ষেত্রে "অস্পষ্ট" ইভেন্টটি আবদ্ধ করা (আমার ক্ষেত্রে jQuery সহ)।

এটি কারণ যখন কীবোর্ডটি সমস্ত ফর্ম ক্ষেত্র ঝাপসা হয়ে যায়। সুতরাং আমার পরিস্থিতির জন্য এই সমস্যাগুলি হ্রাস পেয়েছে।

$('input, textarea').bind('blur', function(e) {

       // Keyboard disappeared
       window.scrollTo(0, 1);

});

আশা করি এটা সাহায্য করবে. মিশেল


এই উত্তরের জন্য ধন্যবাদ। আইপ্যাড সাফারি কীবোর্ডের কারণে টেক্সারিয়া কার্সারটি পাঠ্যক্রমের বাইরে স্থানচ্যুত (অফসেট) করার কারণে এমন একটি সমস্যা সমাধানের জন্য আমি দরকারী বলে মনে করি।
কেন্ডব্রোধন

14

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


1
এটি একটি উদ্ভাবনী ধারণা। আমি একটি অনুরূপ সমাধান পেয়েছি যা ভার্চুয়াল কীবোর্ড সনাক্ত করতে বর্তমান স্ক্রোল অবস্থানটিও ব্যবহার করে।
এলকেএম

তুমি আমার দিন বাঁচিয়েছ!
আজটাক

11

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

var element = document.getElementById("element"); // the input field
var focused = false;

var virtualKeyboardHeight = function () {
    var sx = document.body.scrollLeft, sy = document.body.scrollTop;
    var naturalHeight = window.innerHeight;
    window.scrollTo(sx, document.body.scrollHeight);
    var keyboardHeight = naturalHeight - window.innerHeight;
    window.scrollTo(sx, sy);
    return keyboardHeight;
};

element.onfocus = function () {
    focused = true;
    setTimeout(function() { 
        element.value = "keyboardHeight = " + virtualKeyboardHeight() 
    }, 1); // to allow for orientation scrolling
};

window.onresize = function () {
    if (focused) {
        element.value = "keyboardHeight = " + virtualKeyboardHeight();
    }
};

element.onblur = function () {
    focused = false;
};

মনে রাখবেন যে ব্যবহারকারী যখন একটি ব্লুটুথ কীবোর্ড ব্যবহার করছেন তখন কীবোর্ড হাইট 44 হয় যা [পূর্ববর্তী] [পরবর্তী] সরঞ্জামদণ্ডের উচ্চতা।

আপনি যখন এই সনাক্তকরণটি করেন তখন খুব সামান্য ফ্লিকর থাকে তবে এটি এড়ানো সম্ভব বলে মনে হয় না।


5
আমি এটি মাত্র iOS 8.2 এ চেষ্টা করেছি এবং এটি কার্যকর হয় না ... এটি কি নতুন আইওএসের জন্য কোনও পর্যায়ে কাজ করা বন্ধ করে দিয়েছে?
মিং

1
আমার জন্যও কাজ করেনি
আইওএস

8

সম্পাদনা: অ্যাপল দ্বারা নথিবদ্ধ যদিও আমি এটি আসলে কাজ করতে পারি না: ডাব্লু কে ওয়েবেভিউ আচরণটি কীবোর্ডের সাথে প্রদর্শন করে : "আইওএস 10-এ, ডাব্লুকেউভিউ ভিউ অবজেক্টগুলি উইন্ডো আইনে আপডেট করে সাফারির নেটিভ আচরণের সাথে মেলে হাইট সম্পত্তি যখন কীবোর্ড প্রদর্শিত হবে, এবং কল করবেন না ইভেন্টগুলি পুনরায় আকার দিন "(পুনরায় আকার ব্যবহারের পরিবর্তে কীবোর্ড সনাক্ত করতে ফোকাস বা ফোকাস প্লাস বিলম্ব ব্যবহার করতে পারে)।

সম্পাদনা করুন: কোড অনুমান অনস্ক্রিন কীবোর্ড, বাহ্যিক কীবোর্ড নয়। এটিকে রেখে দেওয়া কারণ তথ্য অন্যদের জন্য উপকারী হতে পারে যা কেবলমাত্র অনস্ক্রিন কীবোর্ড সম্পর্কে যত্নশীল। পৃষ্ঠার প্যারামগুলি দেখতে http://jsbin.com/AbimiQup/4 ব্যবহার করুন ।

আমরা পরীক্ষা করে দেখি যে এটি document.activeElementকোনও উপাদান যা কীবোর্ডটি দেখায় (ইনপুট টাইপ = পাঠ্য, টেক্সারিয়া ইত্যাদি)।

নিম্নলিখিত কোডগুলি আমাদের উদ্দেশ্যে জিনিসগুলিকে ঝাঁকুনি দেয় (যদিও সাধারণত সঠিক নয়)।

function getViewport() {
    if (window.visualViewport && /Android/.test(navigator.userAgent)) {
        // https://developers.google.com/web/updates/2017/09/visual-viewport-api    Note on desktop Chrome the viewport subtracts scrollbar widths so is not same as window.innerWidth/innerHeight
        return {
            left: visualViewport.pageLeft,
            top: visualViewport.pageTop,
            width: visualViewport.width,
            height: visualViewport.height
        };
    }
    var viewport = {
            left: window.pageXOffset,   // http://www.quirksmode.org/mobile/tableViewport.html
            top: window.pageYOffset,
            width: window.innerWidth || documentElement.clientWidth,
            height: window.innerHeight || documentElement.clientHeight
    };
    if (/iPod|iPhone|iPad/.test(navigator.platform) && isInput(document.activeElement)) {       // iOS *lies* about viewport size when keyboard is visible. See http://stackoverflow.com/questions/2593139/ipad-web-app-detect-virtual-keyboard-using-javascript-in-safari Input focus/blur can indicate, also scrollTop: 
        return {
            left: viewport.left,
            top: viewport.top,
            width: viewport.width,
            height: viewport.height * (viewport.height > viewport.width ? 0.66 : 0.45)  // Fudge factor to allow for keyboard on iPad
        };
    }
    return viewport;
}


function isInput(el) {
    var tagName = el && el.tagName && el.tagName.toLowerCase();
    return (tagName == 'input' && el.type != 'button' && el.type != 'radio' && el.type != 'checkbox') || (tagName == 'textarea');
};

উপরের কোডটি কেবল আনুমানিক: এটি বিভক্ত কীবোর্ড, আনডকৃত কীবোর্ড, শারীরিক কীবোর্ডের জন্য ভুল। উপরের মতামত অনুসারে, আপনি window.innerHeightসম্পত্তি ব্যবহার করে সাফারি (আইওএস 8?) বা ডব্লিউকেউইউভিউ (আইওএস 10 এর পরে) প্রদত্ত কোডের চেয়ে আরও ভাল কাজ করতে সক্ষম হতে পারেন ।

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

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


ব্রাউজারগুলির উপর নির্ভর করে পূর্ণ স্ক্রিন বিরতি সনাক্ত করতে যখন কিছু উপাদান একেবারে অবস্থান করে। মোটেই নির্ভরযোগ্য নয়।
উদো

5

কেবলমাত্র Android 4.1.1 এ পরীক্ষা করা হয়েছে:

অস্পষ্ট ঘটনাটি কীবোর্ডকে উপরে এবং নীচে পরীক্ষা করার জন্য নির্ভরযোগ্য ইভেন্ট নয় কারণ ব্যবহারকারী হিসাবে স্পষ্টভাবে কীবোর্ডটি লুকিয়ে রাখার বিকল্প যা ক্ষেত্রটিতে কোনও ঝাপসা ঘটনা ঘটায় না যা কীবোর্ডটি দেখাতে বাধ্য করেছিল।

পুনরায় আকারের ইভেন্টটি কোনও মনোভাবের মতো কাজ করে যদি কোনও কারণে কীবোর্ডটি উপরে আসে বা নিচে আসে।

কফি:

$(window).bind "resize", (event) ->  alert "resize"

যে কোনও সময় কীবোর্ডে আগুন জ্বলতে বা কোনও কারণে লুকানো থাকে।

তবে নোট করুন তবে অ্যান্ড্রয়েড ব্রাউজারের ক্ষেত্রে (অ্যাপ্লিকেশন না করে) একটি প্রত্যাহারযোগ্য ইউআরএল বার রয়েছে যা পুনরায় সরিয়ে নেওয়ার পরে পুনরায় আকার ফায়ার করে না যা উপলব্ধ উইন্ডোর আকার পরিবর্তন করে।


অস্পষ্ট ইভেন্টের জন্য কীবোর্ডটি ম্যানুয়ালি খারিজ করে দেওয়ার জন্য +1। আকার পরিবর্তন একটি ভাল ধারণা এবং এটি অ্যান্ড্রয়েড ডিভাইসের জন্য ভাল কাজ করবে।
অঙ্কিত গার্গ

এটি আইফোন 5 (আইওএস 6.0.2) এবং একটি আইপ্যাড 3 (আইওএস 6.0) উভয়ই কাজ করে তা নিশ্চিত করতে পারে।
দিয়েগো আগুলি

1
ক্রসব্রোসারেস্টেস্টিং-এ আইওএস 6-এ Chrome 41-এ কেবল পরীক্ষা করা হয়েছে - ভার্চুয়াল কীবোর্ড প্রদর্শিত বা অদৃশ্য হয়ে পুনরায় আকারটি ট্রিগার করে না।
ড্যান ড্যাসকলেসকু

4

কীবোর্ড সনাক্ত করার পরিবর্তে, উইন্ডোর আকার সনাক্ত করার চেষ্টা করুন

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

উদাহরণস্বরূপ এই কোডটি ব্যবহার করে দেখুন।

var last_h = $(window).height(); //  store the intial height.
var last_w = $(window).width(); //  store the intial width.
var keyboard_is_on = false;
$(window).resize(function () {
    if ($("input").is(":focus")) {
        keyboard_is_on =
               ((last_w == $(window).width()) && (last_h > $(window).height()));
    }   
});     

2
এটি আইওএস 8-এ আর কাজ করবে বলে মনে হয় না The কীবোর্ডটি সামগ্রীটিকে ওভারলে করে এবং বেশিরভাগ ক্ষেত্রে সামগ্রীতে প্রাথমিকভাবে ফোকাস করা ইনপুট ক্ষেত্রগুলিকে অস্পষ্ট করে স্ক্রোল করে দেয়।
রিক স্ট্রহল

3
আইওএস 6 উইন্ডোতে উইন্ডোটির উচ্চতা কীবোর্ড সহ উচ্চতা প্রদান করে IOS6 উইন্ডোতে window
মিশিয়েল

1
নোট করুন যে শীর্ষস্থান বারটি যখন স্ক্রোল করার সময় স্ক্রিনের ভিতরে এবং বাইরে চলে যায় তখন উচ্চতাও পরিবর্তন হয়। আমি বলব, আপনি একটি মিনিট উচ্চতার পরিবর্তন যুক্ত করুন, 200px (পরীক্ষিত নয়)।
অরিয়াদাম

1

এই সমাধানটি স্ক্রোলের অবস্থানটি মনে রাখে

    var currentscroll = 0;

    $('input').bind('focus',function() {
        currentscroll = $(window).scrollTop();
    });

    $('input').bind('blur',function() {
        if(currentscroll != $(window).scrollTop()){

        $(window).scrollTop(currentscroll);

        }
    });

1

আর একবার চেষ্টা কর:

var lastfoucsin;

$('.txtclassname').click(function(e)
{
  lastfoucsin=$(this);

//the virtual keyboard appears automatically

//Do your stuff;

});


//to check ipad virtual keyboard appearance. 
//First check last focus class and close the virtual keyboard.In second click it closes the wrapper & lable

$(".wrapperclass").click(function(e)
{

if(lastfoucsin.hasClass('txtclassname'))
{

lastfoucsin=$(this);//to avoid error

return;

}

//Do your stuff 
$(this).css('display','none');
});`enter code here`

1

পূর্ববর্তী উত্তরে কোথাও উল্লিখিত উইন্ডো.নাইনার হাইটা ভেরিয়েবলটি আইওএস 10 এ এখন সঠিকভাবে আপডেট হবে এবং যেহেতু আমার পূর্ববর্তী সংস্করণগুলির জন্য সমর্থনের প্রয়োজন নেই আমি নিম্নলিখিত হ্যাকটি নিয়ে এসেছি যা কিছুটা সহজ হতে পারে তবে আলোচিত "সমাধান"।

//keep track of the "expected" height
var windowExpectedSize = window.innerHeight;

//update expected height on orientation change
window.addEventListener('orientationchange', function(){
    //in case the virtual keyboard is open we close it first by removing focus from the input elements to get the proper "expected" size
    if (window.innerHeight != windowExpectedSize){
        $("input").blur();
        $("div[contentEditable]").blur();     //you might need to add more editables here or you can focus something else and blur it to be sure
        setTimeout(function(){
            windowExpectedSize = window.innerHeight;
        },100);
    }else{
        windowExpectedSize = window.innerHeight;
    }
});

//and update the "expected" height on screen resize - funny thing is that this is still not triggered on iOS when the keyboard appears
window.addEventListener('resize', function(){
    $("input").blur();  //as before you can add more blurs here or focus-blur something
    windowExpectedSize = window.innerHeight;
});

তাহলে আপনি ব্যবহার করতে পারেন:

if (window.innerHeight != windowExpectedSize){ ... }

কীবোর্ড দৃশ্যমান কিনা তা পরীক্ষা করতে। আমি এটি এখন আমার ওয়েব অ্যাপ্লিকেশনে কিছুক্ষণ ব্যবহার করছি এবং এটি ভালভাবে কাজ করে তবে (অন্যান্য সমস্ত সমাধানের মতোই) আপনি এমন একটি পরিস্থিতি খুঁজে পেতে পারেন যেখানে এটি ব্যর্থ হয় কারণ "প্রত্যাশিত" আকারটি সঠিকভাবে আপডেট হয় না বা কোনও কিছু।


আমি আশা করছিলাম এই ঘটনাটি ছিল তবে না, এটি আপডেট হয় না।
স্যাম

0

আমি কিছু অনুসন্ধান করেছি এবং একটি "কীবোর্ড দেখানো" বা "কীবোর্ড খারিজ করা হয়েছে" এর জন্য কংক্রিটের কিছু পাইনি। সমর্থিত ইভেন্টগুলির অফিসিয়াল তালিকা দেখুন । আইপ্যাডের জন্য প্রযুক্তিগত নোট টিএন 2262ও দেখুন । আপনি সম্ভবত ইতিমধ্যে জানেন, একটি বডি ইভেন্ট রয়েছে যা onorientationchangeআপনি ল্যান্ডস্কেপ / প্রতিকৃতি সনাক্ত করতে তারের সাথে যুক্ত করতে পারেন।

একইভাবে, তবে একটি বুনো অনুমান ... আপনি কি পুনরায় আকারটি সনাক্ত করার চেষ্টা করেছেন? ভিউপোর্ট পরিবর্তনগুলি কীবোর্ড প্রদর্শিত / লুকানো থেকে পরোক্ষভাবে সেই ইভেন্টটিকে ট্রিগার করতে পারে।

window.addEventListener('resize', function() { alert(window.innerHeight); });

যা কোনও নতুন আকারের ইভেন্টে কেবল নতুন উচ্চতাকে সতর্ক করবে ...


10
দুর্ভাগ্যক্রমে, আমার পরীক্ষাগুলিতে, কীবোর্ডটি পুনরায় আকার দেওয়ার ইভেন্টটিকে ট্রিগার করে না।
এলকেএম

0

আমি নিজে এটি চেষ্টা করি নি, তাই এটি কেবল একটি ধারণা ... তবে আপনি উইন্ডোটির উচ্চতা কখন পরিবর্তন হয় এবং তার জন্য নকশাটি পরিবর্তন করেন তা দেখতে CSS এর সাথে মিডিয়া প্রশ্নগুলি ব্যবহার করার চেষ্টা করেছেন? আমি কল্পনা করব যে সাফারি মোবাইল কীবোর্ডটিকে উইন্ডোর অংশ হিসাবে স্বীকৃতি দিচ্ছে না যাতে আশা করা যায়।

উদাহরণ:

@media all and (height: 200px){
    #content {height: 100px; overflow: hidden;}
}

2
খুব চতুর ধারণা। দুর্ভাগ্যক্রমে, আমার পরীক্ষাগুলিতে, কীবোর্ডটি দেখানো মিডিয়া প্রশ্নের মূল্যায়নের জন্য ব্যবহৃত উচ্চতার মানগুলিকে প্রভাবিত করে না।
এলকেএম

আমি নিশ্চিত করতে পারি: উচ্চতা: 250px আমার জন্য কাজ করেছে (অ্যান্ড্রয়েডে, কমপক্ষে)।
উড্রোশিগেরু

0

সমস্যাটি হ'ল, এমনকি ২০১৪ সালে, ডিভাইসগুলি নরম কীবোর্ডটি উন্মুক্ত থাকাকালীন স্ক্রিনের পুনরায় আকারের ইভেন্টগুলি, পাশাপাশি স্ক্রোল ইভেন্টগুলি হ্যান্ডেল করে।

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

আমি মিডিয়া প্রশ্নের (অথবা window.matchMedia প্রস্থ সনাক্তকরণ এবং জন্য) Modernizr স্পর্শ ইভেন্টের সনাক্তকরণের জন্য।


0

আপনার অ্যাপ্লিকেশনটির সেটিংসে একটি চেকবক্স থাকা আরও সহজ যেখানে ব্যবহারকারী 'বাহ্যিক কীবোর্ড সংযুক্ত' করতে পারেন?

ছোট মুদ্রণে, ব্যবহারকারীকে ব্যাখ্যা করুন যে বর্তমানে বাহ্যিক কীবোর্ডগুলি আজকের ব্রাউজারগুলিতে সনাক্তযোগ্য নয়।


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

-2

ঠিক আছে, আপনার ইনপুট বাক্সগুলিতে কখন ফোকাস থাকবে তা আপনি সনাক্ত করতে পারেন এবং কীবোর্ডটির উচ্চতা আপনি জানেন। স্ক্রিনের ওরিয়েন্টেশন পেতে সিএসএসও রয়েছে, তাই আমি মনে করি আপনি এটি হ্যাক করতে পারেন।

যদিও আপনি কোনওভাবে কোনও দৈহিক কীবোর্ডের কেসটি পরিচালনা করতে চান।

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