লিফলেট চিহ্নিতকরণে রাইট ক্লিকের মাধ্যমে আমি কীভাবে ইভেন্টের প্রচার বন্ধ করব?


9

লিফলেট চিহ্নিতকারীগুলিতে আমি একটি রাইটক্লিক ইভেন্ট পাইনি তাই আমি মোডাউনড ইভেন্টটি শুনতে শুরু করি। এই ইভেন্টটি সমাধান করার পদ্ধতিটিতে আমি পরীক্ষা করি

if (event.originalEvent.button == 2) {
    do_something();
    // now i want to stop propagation of the rightclick
    return;
}

এটি সেই কাজ করে যা কি_সোমথিং () বলা হয়, তবে ইভেন্টটি মানচিত্রে প্রচার করে এবং একটি প্রসঙ্গমেনু দেখানো হচ্ছে। আমি কীভাবে ইভেন্টটিকে মানচিত্রে প্রচার করতে বাধা দেব?

এটি কি সমস্ত বড় (অর্থাত্ IE) ব্রাউজারগুলিতে কাজ করে?

উত্তর:


4

আমার প্রথম উত্তরটি দৃশ্যত কাজ করছিল না এবং আমি এখন একই সমস্যার মুখোমুখি হয়েছি। এখানে একটি নতুন পদ্ধতির:

লিফলেট একটি ইভেন্টকে সমর্থন করে contextmenu। লিফলেট ইভেন্ট ডকুমেন্টেশন হিসাবে এখানে পাওয়া যায় ।

ব্যবহারকারী যখন মানচিত্রে ডান মাউস বোতামটি চাপ দেয় তখন এই ইভেন্টে শ্রোতা থাকে কিনা তা ডিফল্ট ব্রাউজারের প্রসঙ্গ মেনুটি প্রদর্শন করতে বাধা দেয় F

তাত্ত্বিকভাবে কোড

marker.on('contextmenu', function(e) {
  this.openPopup();
});

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

পাইপলাইনে অদূর ভবিষ্যতে এই বৈশিষ্ট্যটি সক্ষম করার জন্য কাজ চলছে বলে মনে হচ্ছে ( এখানে এবং এখানে আলোচনা দেখুন )। সুতরাং, আমি অনুমান করি যে আমরা কেবল আশা করতে পারি যে লিফলেটটি এটিতে দ্রুত কাজ করে এবং পরবর্তী প্রকাশে ইভেন্টটি সক্ষম করে ...

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


4

আইই এবং অন্যান্য সমস্ত ব্রাউজারে ডিফল্ট আচরণ রোধ করা হচ্ছে:

event.returnValue = false;
if (event.preventDefault) event.preventDefault();

এটি কাজ করে বলে মনে হচ্ছে না। আপনি লিফলেট এ পরীক্ষা করেছেন? এবং আপনার ইভেন্টটি কোনও লিফলেট ইভেন্ট বা ব্রাউজার দ্বারা চালিত আসল DOMMouseEvent হয়?
এমআরজি

এটি একটি ডিওএম ইভেন্টের জন্য। লিফলেট যদি ইভেন্টগুলিকে মোড় করে দেয় তবে ইভেন্ট.অরিজিনাল এভেন্ট ব্যবহার করুন।
tmcw

4

এই অভ্যন্তরীণ ফাংশনটি ব্যবহার করে দেখুন:

L.DomEvent.stopPropagation(event);

এটা কৌতুক করা উচিৎ।

পিএস আমি কোনও ডকুমেন্টেশনে এটি কখনই খুঁজে পাইনি তবে এটি কোনও প্যাচে ব্যবহার করে দেখেছি। আপনার নিজের ঝুঁকিতে ব্যবহার করুন। ;)

সম্পাদনা করুন: আমি এই অভ্যন্তরীণ ফাংশনটিও পেয়েছি

L.DomEvent.preventDefault(event);

যা event.preventDefault()jQuery এর মতো একইরকম বলে মনে হচ্ছে ।


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

সুযোগ পেয়ে আমি সবেমাত্র এটি পেয়েছি L.DomEvent.preventDefault(event);। আমি যা দেখেছি (লিফলেট.জেএস উত্সের দিকে তাকানো থেকে) preventDefault()এটি jQuery এর সরবরাহকারীর সাথে খুব মিল থাকা উচিত ... চেষ্টা করে দেখুন! :)
fgysin মনিকা

আমি এটি চেষ্টা করেছিলাম, তবে আমি যখন কোনও এইচটিএমএল পৃষ্ঠায় ডান ক্লিক করি তখন প্রমিত প্রসঙ্গটি আমি এফএফ এ পাই।
এমআরজি

2

ঘটনা বন্ধ করার জন্য ঘটনাক্রমে আমি একটি সমাধান পেয়েছি।

উদাহরণস্বরূপ, যদি কোনও ইভেন্ট এর মতো তৈরি করা হয় - map.on("click", onMapClick);, ইভেন্টটি এই কোড দিয়ে থামানো যেতে পারে -map.off("click", onMapClick);

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