পৃষ্ঠাটিকে আরও প্রতিক্রিয়াশীল করতে ইভেন্ট হ্যান্ডলারটিকে 'প্যাসিভ' হিসাবে চিহ্নিত করুন


217

আমি টানার জন্য হাতুড়ি ব্যবহার করছি এবং অন্যান্য জিনিস লোড করার সময় এটি চপ্পি হয়ে উঠছে, যেমন এই সতর্কতা বার্তা আমাকে বলছে telling

মূল থ্রেড ব্যস্ত থাকায় এক্স টা এমএসের জন্য 'টাচস্টার্ট' ইনপুট ইভেন্টটির হ্যান্ডলিং বিলম্বিত হয়েছিল। পৃষ্ঠাটিকে আরও প্রতিক্রিয়াশীল করতে ইভেন্ট হ্যান্ডলারটিকে 'প্যাসিভ' হিসাবে চিহ্নিত করুন।

তাই আমি শ্রোতাদের মতো 'প্যাসিভ' যুক্ত করার চেষ্টা করেছি

Hammer(element[0]).on("touchstart", function(ev) {
  // stuff
}, {
  passive: true
});

তবে আমি এখনও এই সতর্কতা পাচ্ছি।

উত্তর:


264

প্রথমবারের মতো এই সতর্কতাটি গ্রহণকারীদের জন্য, এটি প্যাসিভ ইভেন্ট শ্রোতার নামক রক্তক্ষরণ প্রান্ত বৈশিষ্ট্যের কারণে যা ব্রাউজারগুলিতে মোটামুটি সম্প্রতি (গ্রীষ্মে 2016) কার্যকর করা হয়েছে। Https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md থেকে :

প্যাসিভ ইভেন্ট শ্রোতাগুলি ডিওএম স্পিতে একটি নতুন বৈশিষ্ট্য যা বিকাশকারীদের স্পর্শ এবং চাকা ইভেন্ট শ্রোতাদের উপর ব্লক করার জন্য স্ক্রোলিংয়ের প্রয়োজনীয়তা বাদ দিয়ে আরও ভাল স্ক্রোল পারফরম্যান্স বেছে নিতে সক্ষম করে। বিকাশকারীরা স্পর্শ এবং চাকা শ্রোতাদের {প্যাসিভ: সত্য with দিয়ে এনেটেট করতে পারেন যে তারা কখনই প্রতিরোধ ডিফল্টকে অনুরোধ করবে না। এই বৈশিষ্ট্যটি ক্রোম 51, ফায়ারফক্স 49 এ পাঠানো হয়েছে এবং ওয়েবকিটে অবতরণ করেছে। পূর্ণ সরকারী ব্যাখ্যার জন্য এখানে আরও পড়ুন।

আরও দেখুন: প্যাসিভ ইভেন্ট শ্রোতা কী?

সমর্থন বাস্তবায়নের জন্য আপনাকে আপনার .js লাইব্রেরির জন্য অপেক্ষা করতে হতে পারে।

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


16
আয়নিক গ্রন্থাগার সম্পর্কে কি?
অভিত

10
আমি ফোন করছি preventDefault()- এই সতর্কতাটি কি দমন করা সম্ভব?
মাজা


12
গুগল ম্যাপস জাভাস্ক্রিপ্ট এপিআই সংস্করণ 3 এছাড়াও এই সতর্কতা উত্পন্ন করে। ইস্যুটি ইস্যু করা হয়েছে ইস্যু করা হয়েছে ইস্যুটিউইউটরেকার.কম . / issues/63211698 এ । (
কৌতুকজনকভাবে

6
এই সতর্কবার্তাটি দমন করতে আপনি `addEventListener ('টাচস্টার্ট', this.callPassedFuntion, ive প্যাসিভ: মিথ্যা})`
শ্রোমি শোয়ার্জ

9

এটি সতর্কতা বার্তাটি গোপন করে:

jQuery.event.special.touchstart = {
  setup: function( _, ns, handle ) {
      this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") });
  }
};

6
আসল ঘটনাটি থামানো কি লক্ষ্য হবে? আমি সমস্যাটি পরিচালনা না করা পর্যন্ত আমি বার্তাটি আড়াল করতে চাই না।
yardpenalty.com

1
আমি মনে করি এটি একটি jquery গ্রন্থাগার সমস্যা। আমি মনে করি বিকাশকারীদের অবশ্যই এটি ঠিক করতে হবে। তবে আপনি যদি এটি পেয়ে থাকেন তবে দয়া করে এটি কীভাবে করবেন তা আমাকে জানান। তোমাকে অনেক ধন্যবাদ.
ইভান রদ্রিগেজ

নিশ্চিত ইভান! হ্যাঁ তাই হয়। আরে, এখন আমি কৌতূহলী ... আমি ডি 3 প্লাগইন ব্যবহার করছি এবং আমি 2300 লঙ্ঘনের মতো পাচ্ছি। হতে পারে আপনার কোড সাহায্য করবে! আমি তোমাকে পদে রাখবো!
yardpenalty.com

@ yardpenalty.com, না, ইভেন্ট থামানো লক্ষ্য নয়! সতর্কবাণীতে বলা হয়েছে যে আপনি ইভেন্টটিতে ডিফল্ট আচরণকে বাধা দিতে পারে কি না তা নির্দিষ্ট করেই আপনি আপনার শ্রোতাকে রেখেছেন। আপনি কল করতে চান এমন ক্ষেত্রে যদি আপনার থাকে তবে আপনার preventDefault()উল্লেখ করা উচিত passive: false। যদি না হয় তবে নির্দিষ্ট করুন passive: true। আপনি কেবল উল্লেখ না করলে আপনি কেবল সতর্কতা পান get যদি আপনি নির্দিষ্ট করে থাকেন passive: trueএবং কল preventDefault()পান, এটি একটি ত্রুটির ফলস্বরূপ এবং ডিফল্টটিকে প্রতিরোধ করা হয় না। নির্দিষ্ট passiveকরা এখানে কোনও হ্যাক নয়। এটি সমাধান । সতর্কবার্তাটি এটাই বলে!
তাও

মন্তব্য করতে ধন্যবাদ। কয়েক বছর কেটে গেছে তবে আমি ভবিষ্যতে সমাধানটি অবশ্যই মনে রাখব!
yardpenalty.com

1

লারাভেলের সিলেক্ট 2 ড্রপডাউন প্লাগইনে এটির মুখোমুখি। থেকে আলফ্রেড ওয়ালেসের পরামর্শ অনুসারে মান পরিবর্তন করা

this.element.addEventListener(t, e, !1)

প্রতি

this.element.addEventListener(t, e, { passive: true} )

বিষয়টি সমাধান করে তার ডাউন ভোট কেন, আমি জানি না তবে এটি আমার পক্ষে কাজ করে।


0

উত্তরাধিকার সম্পর্কিত সমস্যাগুলির সাথে আটকে রয়েছে, ত্রুটিটি ছুঁড়ে রেখার সন্ধান করুন এবং যুক্ত করুন {passive: true}- যেমন:

this.element.addEventListener(t, e, !1)

হয়ে

this.element.addEventListener(t, e, { passive: true} )

0

জ্যাকুয়ারি-ইউআই-টেনে নেওয়ার মতো জ্যুচুরি-ইউআই-টাচ-পাঞ্চের সাথে আমি এটি আইভান রদ্রিগিজের মতোই স্থির করেছিলাম, তবে টাচমোভের জন্য আরও একটি ইভেন্ট ওভাররাইড দিয়ে:

jQuery.event.special.touchstart = {
    setup: function( _, ns, handle ) {
        this.addEventListener('touchstart', handle, { passive: !ns.includes('noPreventDefault') });
    }
};
jQuery.event.special.touchmove = {
    setup: function( _, ns, handle ) {
        this.addEventListener('touchmove', handle, { passive: !ns.includes('noPreventDefault') });
    }
};

-1

আমি এমন একটি সমাধান পেয়েছি যা jQuery 3.4.1 স্লিমে কাজ করে

আন-মিনিফাইংয়ের পরে, {passive: true}1567 লাইনে অ্যাডএভেন্টলিস্টনার ফাংশনে যুক্ত করুন:

t.addEventListener(p, a, {passive: true}))

কিছুই বিরতি এবং বাতিঘর অডিট শ্রোতাদের সম্পর্কে অভিযোগ করবেন না।


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