কীভাবে একজন জাভাস্ক্রিপ্টের মাধ্যমে ম্যাকের কমান্ড কীটি ক্যাপচার করে?


175

কীভাবে একজন Cmdজাভাস্ক্রিপ্টের মাধ্যমে ম্যাকের চাবিটি ক্যাপচার করতে পারে ?



এর জন্য একটি জাভাস্ক্রিপ্ট- লিবিব রয়েছে : কীমাস্টার.জেএস (jquery এর মতো কোনও নির্ভরতা নেই)
বেমেসার

উত্তর:


238

সম্পাদনা করুন: 2019 পর্যন্ত e.metaKeyহয় MDN অনুযায়ী সমস্ত প্রধান ব্রাউজারে সমর্থিত

মনে রাখবেন উইন্ডোজে, ⊞ Windowsকীটি "মেটা" কী হিসাবে বিবেচিত হলেও , এটি ব্রাউজারগুলির দ্বারা ক্যাপচার করা হবে না।

এটি কেবলমাত্র ম্যাকস / কিবোর্ডের কমান্ড কী-এর জন্য।


Shift/ Alt/ এর বিপরীতে Ctrl, Cmd("অ্যাপল") কীটি কোনও সংশোধক কী হিসাবে বিবেচনা করা হয় না, পরিবর্তে, যখন একটি কী টিপানো হয় এবং তারপরে অবসন্ন হয় তখন আপনার keydown/ keyupএবং রেকর্ড করা উচিত event.keyCode

দুর্ভাগ্যক্রমে, এই মূল কোডগুলি ব্রাউজার-নির্ভর:

  • ফায়ারফক্স: 224
  • অপেরা: 17
  • ওয়েবকিট ব্রাউজার (সাফারি / ক্রোম): 91(বাম কমান্ড) বা 93(ডান কমান্ড)

আপনি জাভাস্ক্রিপ্ট ম্যাডনেস নিবন্ধটি পড়তে আগ্রহী হতে পারেন : কীবোর্ড ইভেন্টগুলি , যেখান থেকে আমি সেই জ্ঞানটি শিখেছি।


2
জেনে রাখুন যে অপেরা এখন ওয়েবকিট বিভাগেও রয়েছে। আমি মনে করি কেবল 91, 93 এবং 224 এর জন্য শুনলে কাজটি হয়ে যাবে। 17 হ'ল সিটিটিএল। পুরানো অপেরা কি সিএমডি এবং সিটিআরএলকে পার্থক্য করে না ??
স্টিভেন লু

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

5
মিরোস্লাভের মন্তব্যের জবাবে, কেবলমাত্র নোট করুন যে এটি কেবল keydownইভেন্টগুলিতে কাজ করে , না keyup
nachocab

209

আপনি event.metaKeyকীডাউন ইভেন্টগুলির সাথে কাজ করে থাকলে আপনি ইভেন্টটির বৈশিষ্ট্যটিও দেখতে পারেন। আমার জন্য আশ্চর্যজনকভাবে কাজ করেছেন! আপনি এটি এখানে চেষ্টা করতে পারেন


এটি ম্যাকওএসে ফায়ারফক্স ৪.০.১ এর সাথে সেট করা হবে বলে মনে হচ্ছে না। প্রদত্ত যে গ্রহণযোগ্য উত্তর এবং লিঙ্কযুক্ত রেফারেন্স উভয়ই আপনার মতামতগুলির সাথে একমত নয়, আমি মনে করি এই উত্তরটি ভুল is
জোশ গ্লোভার

8
.metaKeyপ্রকৃতপক্ষে সর্বশেষতম ফায়ারফক্স, সাফারি এবং অপেরাতে কাজ করে। ক্রোমে, .metaKeyনিয়ন্ত্রণে ট্রিগার (কমান্ড নয়)।
ইলিয়া সেমেনভ

1
FWIW, cmd + e আপনার স্ক্রিপ্টে আমার জন্য কাজ করে না। Ctrl আপনার কাছে থাকা সিএমডি আইকনটি ট্রিগার করে
অস্কার গডসন

1
সেমিডি + ই আমার জন্য ইভেন্টটিকে আগুন দেয় না (ক্রোম)। ctrl + e করে।
স্পেন্সার উইলিয়ামস

23
আমি মনে করি কৌশলটি (এমনকি ক্রোমেও) এটি হ'ল এটি বা এর keydownজন্য নয় । keyupkeypress
ফিলাফ্রেও

15

আমি দেখেছি যে সাফারি (7.0: 9537.71) এর সর্বশেষ সংস্করণে যদি কমান্ড কীটি অন্য কোনও কী এর সাথে একত্রে চাপানো হয় তবে আপনি কমান্ড কীটি সনাক্ত করতে পারেন। উদাহরণস্বরূপ, আপনি যদি ⌘ + x: সনাক্ত করতে চান, আপনি এক্স কীটি সনাক্ত করতে পারেন এবং ইভেন্ট.মেটাকি সত্যতে সেট করা আছে কিনা তা পরীক্ষা করতে পারেন। উদাহরণ স্বরূপ:

var key = event.keyCode || event.charCode || 0;
console.log(key, event.metaKey);

নিজের নিজের উপর টিপানোর সময়, এটি আউটপুট হবে 120, false। যখন ⌘ + x টিপুন, এটি আউটপুট হবে120, true

এটি কেবল সাফারিতে কাজ করে বলে মনে হচ্ছে - ক্রোম নয়


2017 সালে কি অবস্থা?
সুপারউবারডুপার

13

ইলির ডেটা বেজায় আমি ম্যাকের মডিফায়ার কীগুলি সমর্থন করার জন্য একটি ভ্যানিলা জেএস লাইব্রেরি লিখেছি: https://github.com/MichaelZelensky/jsLibraries/blob/master/macKeys.js

এটি কেবল এটির মতো ব্যবহার করুন, যেমন:

document.onclick = function (event) {
  if (event.shiftKey || macKeys.shiftKey) {
    //do something interesting
  }
}

ক্রোম, সাফারি, ফায়ারফক্স, ম্যাকের অপেরাতে পরীক্ষিত। এটি আপনার জন্য কাজ করে কিনা তা পরীক্ষা করে দেখুন।


8

JQuery ব্যবহার করা লোকদের জন্য, কী ইভেন্টগুলি পরিচালনা করার জন্য একটি দুর্দান্ত প্লাগইন রয়েছে:

গিটহাবে jQuery হটকিগুলি

ধরে রাখার জন্য + + Sএবং Ctrl+ + Sআমি এই ব্যবহার করছি:

$(window).bind('keydown.ctrl_s keydown.meta_s', function(event) {
    event.preventDefault();
    // Do something here
});

1
খুব ভাল কাজ করে। অন্যান্য সমস্ত কী টিপেও ক্যাপচার হয়ে যায়।
ফেলিক্স রাবে

এটি কি ক্রস ব্রাউজার সমর্থিত?
আদিল মালিক

1
আপনি যদি আমার উত্তরের লিঙ্কটি পরিদর্শন করেন তবে আপনি জানতেন: github.com/tzuryby/jquery.hotkeys#jquery-compatibility
কোয়েন।

3

এখানে আমি AngularJS এ কীভাবে করেছি

app = angular.module('MM_Graph')

class Keyboard
  constructor: ($injector)->
    @.$injector  = $injector
    @.$window    = @.$injector.get('$window')                             # get reference to $window and $rootScope objects
    @.$rootScope = @.$injector.get('$rootScope')

  on_Key_Down:($event)=>
    @.$rootScope.$broadcast 'keydown', $event                             # broadcast a global keydown event

    if $event.code is 'KeyS' and ($event.ctrlKey or $event.metaKey)       # detect S key pressed and either OSX Command or Window's Control keys pressed
      @.$rootScope.$broadcast '', $event                                  # broadcast keyup_CtrS event
     #$event.preventDefault()                                             # this should be used by the event listeners to prevent default browser behaviour

  setup_Hooks: ()=>
    angular.element(@.$window).bind "keydown", @.on_Key_Down              # hook keydown event in window (only called once per app load)
    @

app.service 'keyboard', ($injector)=>
  return new Keyboard($injector).setup_Hooks()

0

আপনি যদি ভয়েজগুলি ব্যবহার করেন তবে এটি কেবল ভ্যু-শর্টকি প্লাগইন দ্বারা তৈরি করুন, সবকিছু সহজ হবে

https://www.npmjs.com/package/vue-shortkey

v-shortkey="['meta', 'enter']"·
@shortkey="metaEnterTrigged"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.