মোবাইল সাফারিতে ক্লিক ইভেন্টগুলিতে 300 মিমি বিলম্ব দূর করুন


89

আমি পড়েছি যে লিংক / বোতামটি ইভেন্টটি চালুর সময় থেকে লিঙ্ক / বোতামটি ক্লিক করার সময় থেকে মোবাইল সাফারি ক্লিক ইভেন্টগুলিতে 300 মিমি দেরি করে । বিলম্বের কারণটি হ'ল অপেক্ষা করতে হবে যে ব্যবহারকারী ডাবল-ক্লিক করতে চায় কিনা, তবে ইউএক্স দৃষ্টিকোণ থেকে 300ms অপেক্ষা করা প্রায়শই অনাকাঙ্ক্ষিত।

এই 300 মিমি দেরি করার একটি সমাধান হ'ল jQuery মোবাইল "ট্যাপ" হ্যান্ডলিং ব্যবহার করা। দুর্ভাগ্যক্রমে আমি এই কাঠামোর সাথে পরিচিত নই এবং যদি আমার প্রয়োজন হয় touchendতবে সঠিকভাবে প্রয়োগ করা কোডের একটি লাইন বা দুটি যদি আমার প্রয়োজন হয় তবে কিছু বড় কাঠামো লোড করতে চাই না ।

অনেক সাইটের মতো, আমার সাইটেও অনেক ক্লিক ইভেন্ট রয়েছে:

$("button.submitBtn").on('click', function (e) {   
  $.ajaxSubmit({... //ajax form submisssion
});

$("a.ajax").on('click', function (e) {   
  $.ajax({... //ajax page loading
});

$("button.modal").on('click', function (e) {   
      //show/hide modal dialog
});

এবং আমি যা করতে চাই তা হ'ল এই জাতীয় সিঙ্গেল কোড স্নিপেট ব্যবহার করে সমস্ত ক্লিক ইভেন্টগুলিতে 300 মিমি দেরি থেকে মুক্তি পাওয়া :

$("a, button").on('tap', function (e) {
 $(this).trigger('click');
 e.preventDefault();
});

এটা কি খারাপ / ভাল ধারণা?



@ পয়েন্ট ধন্যবাদ, এটি কেবল কার্যকর হতে পারে ...
টিম

"... অবশ্যই এটি ইউএক্স দৃষ্টিকোণ থেকে দুর্দান্ত নয়।" আমি এই অনুমান সম্পর্কে সতর্ক হতে হবে।
অলিভার মুরান

4
@ অলিভারমোরান, সংশোধন করার জন্য ধন্যবাদ, আমি কেবলমাত্র এই বাক্যটি সম্পাদনা করেছি, উপরের প্রশ্নটি দেখুন ..
টিম পিটারসন

4
: একটি সমাধান হতে পারে stackoverflow.com/a/12969739/1491212
Armel Larcier

উত্তর:


73

এখন কিছু মোবাইল ব্রাউজার আপনি ভিউপোর্টটি সেট করলে 300 এমএস ক্লিকের বিলম্বকে সরিয়ে দেয়। আপনার আর workaround ব্যবহার করার প্রয়োজন নেই।

<meta name="viewport" content="width=device-width, user-scalable=no">

এটি বর্তমানে অ্যান্ড্রয়েডের জন্য ক্রোম , অ্যান্ড্রয়েডের জন্য ফায়ারফক্স এবং আইওএসের জন্য সাফারি সমর্থিত

তবে আইওএস সাফারিতে , ডাবল-ট্যাপটি অদৃশ্যযোগ্য পৃষ্ঠাগুলিতে একটি স্ক্রোল অঙ্গভঙ্গি। যে কারণে তারা 300 মিমি বিলম্ব সরাতে পারবেন না । যদি তারা অদৃশ্যযোগ্য পৃষ্ঠাগুলিতে বিলম্ব সরিয়ে না ফেলতে পারে তবে তারা জুম্যাবল পৃষ্ঠাগুলিতে এটি অপসারণের সম্ভাবনা কম।

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

html {
-ms-touch-action: manipulation;
touch-action: manipulation;
}

সূত্র: http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away

আপডেট 2015 ডিসেম্বর

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

আপডেট 2016 মার্চ

আইওএসের সাফারিতে, "দ্রুত-ট্যাপ" প্রতিক্রিয়া তৈরি করতে দ্বিতীয় ট্যাপ শনাক্ত করার জন্য 350 মিমি অপেক্ষা করার সময় সরানো হয়েছে। এটি এমন পৃষ্ঠাগুলির জন্য সক্ষম করা হয়েছে যা প্রস্থ = ডিভাইস-প্রস্থ বা ব্যবহারকারী-পরিমাপযোগ্য = না দিয়ে ভিউপোর্ট ঘোষণা করে। লেখকরা এখানেtouch-action: manipulation দলিল হিসাবে সিএসএস ব্যবহার করে ('স্টাইলিং ফাস্ট-ট্যাপ আচরণ' শিরোনামে নীচে স্ক্রোল করুন) এবং এখানে নির্দিষ্ট উপাদানগুলিতে দ্রুত-ট্যাপ আচরণের বিকল্প বেছে নিতে পারেন ।


আসলে, ডাব্লুপি'র জন্য স্পর্শ ইভেন্ট রয়েছে: স্ট্যাকওভারফ্লো.com
সিড্রিক রেইচেনবাচ

4
হ্যাঁ যা আমার পোস্টে যেমন লিখেছেন -ms-টাচ-অ্যাকশন দ্বারা নিয়ন্ত্রিত হয়।
NoNameProdided

4
হোম পৃষ্ঠা (অ্যাপ্লিকেশন) থেকে অ্যাপ্লিকেশনটি চালানোর সময় আইওএসে ইস্যু এখনও বিদ্যমান। যদি কারও পক্ষে এটির জন্য উপযুক্ত কাজ খুঁজে পাওয়া যায়, তবে এটি খুব স্বাগত জানাবে
মিগুয়েল

4
ম্যানিপুলেশনে টাচ-অ্যাকশন মানগুলি সেট করা কাঙ্ক্ষিত পারফরম্যান্সের সবচেয়ে কাছাকাছি আসে তবে @ মিগুয়েলগুয়ার্ডো যেমন আগে বলেছিলেন, আইওএস-এ আপনার হোম স্ক্রিনে ওয়েব পেজটি স্ট্যান্ডলোন অ্যাপ হিসাবে যুক্ত করার পরে প্রভাবটি হারাবে।
টি। স্টিল

হয়তো কেউ UIWebView হ্যাক করতে পারেন - stackoverflow.com/questions/55155560/...
Eazy

43

ফিনান্সিয়াল টাইমস দ্বারা নির্মিত এই প্লাগইন -ফাস্টিক ক্লিকটি এটি আপনার জন্য নিখুঁতভাবে করে!

ক্লিক ফাংশনের পরে যুক্ত event.stopPropagation();এবং / অথবা event.preventDefault();সরাসরি যুক্ত করা সত্ত্বেও তা নিশ্চিত করুন , অন্যথায় এটি আমার জন্য যেমন দ্বিগুণ হয়ে যেতে পারে, যেমন:

$("#buttonId").on('click',function(event){
    event.stopPropagation(); event.preventDefault();
   //do your magic

});

4
যদি আপনি জেকোয়েরি মোবাইল (সংস্করণ 1.3.2 যাহাই হউক না কেন) ব্যবহার করছেন এই নিখুঁত না হলে, এটি প্যানেলের উইজেট বন্ধের ভঙ্গ github.com/jquery/jquery-mobile/issues/6440
ryan0

সেই ইভেন্ট.স্টপপ্রোপেশন () হ'ল কেন আমি এই পৃষ্ঠায় প্রথম স্থানে এসেছি। পুরোপুরি কাজ করে, আপনাকে ধন্যবাদ!
Lukas

@ জোনাথন fastclickতার যাদুটি কেবলমাত্র টাচ ডিভাইসগুলিতে করেন যা বিলম্বের সমস্যা রয়েছে (অন্যথায় এটি স্বয়ংক্রিয়ভাবে বাইপাস হয়ে গেছে )। তবে, প্রতিটি ক্লিক ইভেন্টের পরে কেবল যুক্ত করা stopPropagationএবং preventDefaultপরে সমস্ত ব্রাউজারের সমস্ত ইভেন্ট হ্যান্ডলারের উপর অবাঞ্ছিত দিক প্রভাবিত হতে পারে।
ব্যবহারকারী

17

আমি জানি এটি পুরানো তবে আপনি কেবল ব্রাউজারে "টাচ" সমর্থিত কিনা তা পরীক্ষা করতে পারবেন না? তারপরে একটি ভেরিয়েবল তৈরি করুন যা হয় "স্পর্শ" বা "ক্লিক করুন" এবং সেই পরিবর্তনটিকে আপনার উপাদানটির সাথে আবদ্ধ হয়ে যাওয়া ইভেন্ট হিসাবে ব্যবহার করবেন?

var clickOrTouch = (('ontouchend' in window)) ? 'touchend' : 'click';
$('#element').on(clickOrTouch, function() {
    // do something
});

সুতরাং সেই কোড নমুনাটি ব্রাউজারে "স্পর্শ" ইভেন্ট সমর্থিত কিনা তা পরীক্ষা করে দেখুন এবং তা না হলে আমরা "ক্লিক" ইভেন্টটি ব্যবহার করি।

(সম্পাদনা করুন: "টাচেন্ড" "অনটচেন্ড" এ পরিবর্তিত হয়েছে)


ধন্যবাদ, আমি এর সরলতা পছন্দ করি। আমি অন্যদের পক্ষে এর সম্ভাব্য সমস্যাগুলি ঘেঁটে দেখতে পছন্দ করব would
টিম পিটারসন

4
@ অ্যান্ড্রেস কাবারলে তার উত্তরে যা ব্যাখ্যা করেছে তার কারণে স্পর্শ ইভেন্টটি ক্লিক ইভেন্টকে প্রতিস্থাপন করতে পারে না। উদাহরণস্বরূপ যদি আপনি কোনও বোতামে স্ক্রোল করেন এবং আপনার আঙুলটি থামে, এটি লিঙ্কটি ট্রিগার করবে ...
adenderenat

দেরি থেকে মুক্তি পেতে কেবল কোনও বড় ফ্যাট অতিরিক্ত লাইব্রেরি অন্তর্ভুক্ত না করে এটি একটি দুর্দান্ত হালকা ওজন সমাধান weight আশা করি আমি এইটি দিয়ে 5 বার ভোট দিতে পারতাম! (যতক্ষণ না আপনি স্ক্রোলের পরিস্থিতি সম্পর্কে চিন্তিত নন!)
টোনজ্যাক

4
স্পর্শ এবং ক্লিক ক্লিক ইভেন্ট সহ কম্পিউটার / ব্রাউজারগুলির জন্য, এটি একটি খারাপ সমাধান।
আলেকজান্ডার ও'মারা

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

12

আমি হ্যামার.জেএস ( গিথুব পৃষ্ঠা) নামে একটি বিশাল জনপ্রিয় বিকল্প পেয়েছি যা আমি মনে করি এটি সেরা পদ্ধতির।

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

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


4
হাতুড়ি ব্যবহার করবেন না। এতে কিছু গুরুতর সমস্যা রয়েছে, উদাহরণস্বরূপ: github.com/EightMedia/hammer.js/issues/388 github.com/EightMedia/hammer.js/issues/366 কমপক্ষে এগুলি স্থির না হওয়া পর্যন্ত এটি ব্যবহার করবেন না
অ্যাডোনিস কে। কাকুলিডিস

2

কোনওভাবে, জুম অক্ষম করা এই ছোট বিলম্বটিকে অক্ষম করে বলে মনে হচ্ছে। বোঝায়, ডাবল-ট্যাপ করার পরে আর দরকার নেই।

আমি কীভাবে একটি মোবাইল ওয়েব পৃষ্ঠায় জুম "অক্ষম" করতে পারি?

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


1

দুর্ভাগ্যক্রমে এটি করার কোনও সহজ উপায় নেই। সুতরাং কেবল ব্যবহার touchstartবা touchendআপনাকে অন্যান্য সমস্যার সাথে ছেড়ে দেবে যেমন উদাহরণস্বরূপ কোনও বোতামে ক্লিক করার পরে কেউ স্ক্রল করা শুরু করে। আমরা কিছুক্ষণের জন্য জেপ্টো ব্যবহার করি এবং এমনকি এই সত্যিকারের ভাল কাঠামোর সাহায্যে কিছু সমস্যা এসেছে যা সময়ের সাথে সাথে এসেছিল। এগুলির মধ্যে অনেকগুলি বন্ধ রয়েছে তবে এটি সাধারণ সমাধানের ক্ষেত্র নয়।

লিঙ্কগুলিতে বিশ্বব্যাপী ক্লিকগুলি পরিচালনা করতে আমাদের কাছে এই সমাধান রয়েছে:

   $(document.body).
    on('tap', 'a',function (e) {
      var href = this.getAttribute('href');
      if (e.defaultPrevented || !href) { return; }
      e.preventDefault();
      location.href= href;
    }).
    on('click', 'a', function (e) {
      e.preventDefault();
    });

- @ অ্যান্ড্রিয়াস, ধন্যবাদ তাই tapআমি পোস্ট করা সাধারণ সমাধানটি ব্যবহার না করে এবং tapউপাদানগুলির দ্বারা উপাদানগুলির ভিত্তিতে ঘটনাগুলি ফ্যাক্টর করার পক্ষে পরামর্শ দিই ?
টিম পিটারসন

কোন কথা না। মূল বিষয়টি tapনিজের দ্বারা সমাধান তৈরির চেষ্টা করা নয় । আমি আমার উত্তর আপডেট করব।
Andreas Köberle

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

1

আমি jquery এবং দ্রুত ক্লিক লাইব্রেরি ছাড়াই একটি সহজ উপায় অনুসন্ধান করেছি। এটি আমার পক্ষে কাজ করে:

var keyboard = document.getElementById("keyboard");
var buttons = keyboard.children;
var isTouch = ("ontouchstart" in window);
for (var i=0;i<buttons.length;i++) {
    if ( isTouch ) {
        buttons[i].addEventListener('touchstart', clickHandler, false);         
    } else {
        buttons[i].addEventListener('click', clickHandler, false);          
    }
}

0

শুধু কিছু অতিরিক্ত তথ্য সরবরাহ করতে।

আইওএস 10 এ, <button>আমার পৃষ্ঠায় থাকা ধারাবাহিকভাবে ট্রিগার করা যায়নি। সবসময় একটি পিছনে ছিল।

আমি টাচ স্টার্ট / হাতুড়ি / ট্যাপজ / ক্লিকের পরিবর্তে টাচস্টার্ট দিয়ে চেষ্টা করেছি, সব ব্যর্থ হয়েছে।

আপডেট: কারণটি মনে হচ্ছে বোতামটি প্রান্তের খুব কাছাকাছি! এটি কেন্দ্রের কাছাকাছি যান এবং পিছিয়ে যান!



0

JQuery এ আপনি "টাচেন্ড" ইভেন্টটি বাঁধতে পারেন, ডাইনি ট্রিগার কোডটি সহজাতভাবে ট্যাপের পরে (কীবোর্ডে কীডাউন জাতীয়)। বর্তমান ক্রোম এবং ফায়ারফক্স ট্যাবলেট সংস্করণে পরীক্ষিত। আপনার টাচ স্ক্রিনের ল্যাপটপ এবং ডেস্কটপ ডিভাইসের জন্যও "ক্লিক করুন" ভুলবেন না।

jQuery('.yourElements').bind('click touchend',function(event){

    event.stopPropagation();
    event.preventDefault();

	// everything else
});

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