Cmdजावास्क्रिप्ट के माध्यम से मैक की कुंजी को कैसे पकड़ता है?
Cmdजावास्क्रिप्ट के माध्यम से मैक की कुंजी को कैसे पकड़ता है?
जवाबों:
संपादित करें: 2019 की स्थिति के अनुसार e.metaKey
किया जाता है MDN के अनुसार सभी प्रमुख ब्राउज़रों पर समर्थित ।
ध्यान दें कि विंडोज पर, हालांकि ⊞ Windowsकुंजी को "मेटा" कुंजी माना जाता है, यह ब्राउज़र द्वारा इस तरह कैप्चर नहीं किया जा सकता है।
यह केवल MacOS / कीबोर्ड पर कमांड कुंजी के लिए है।
Shift/ Alt/ के विपरीत Ctrl, Cmd("Apple") कुंजी को एक संशोधक कुंजी नहीं माना जाता है - इसके बजाय, आपको एक कुंजी दबाए जाने पर और उसके बाद उदास होने पर रिकॉर्ड keydown
/ सुनना चाहिए ।keyup
event.keyCode
दुर्भाग्य से, ये प्रमुख कोड ब्राउज़र-निर्भर हैं:
224
17
91
(लेफ्ट कमांड) या 93
(राइट कमांड)आपको जावास्क्रिप्ट पागलपन: कीबोर्ड ईवेंट्स लेख को पढ़ने में रुचि हो सकती है , जिससे मैंने वह ज्ञान सीखा।
keydown
घटनाओं पर काम करता है, न कि keyup
।
event.metaKey
यदि आप कीडड इवेंट्स के साथ काम कर रहे हैं, तो आप इवेंट की विशेषता को भी देख सकते हैं । मेरे लिए अद्भुत काम किया! आप इसे यहाँ आज़मा सकते हैं ।
.metaKey
वास्तव में नवीनतम फ़ायरफ़ॉक्स, सफारी और ओपेरा में काम करता है। Chrome में, .metaKey
नियंत्रण पर चालू होता है (कमांड पर नहीं)।
keydown
लेकिन इसके लिए keyup
या नहीं keypress
।
मैंने पाया कि आप सफारी (7.0: 9537.71) के नवीनतम संस्करण में कमांड कुंजी का पता लगा सकते हैं यदि इसे किसी अन्य कुंजी के साथ संयोजन में दबाया जाए। उदाहरण के लिए, यदि आप ⌘ + x: का पता लगाना चाहते हैं, तो आप x कुंजी का पता लगा सकते हैं और देख सकते हैं कि Event.metaKey सही पर सेट है या नहीं। उदाहरण के लिए:
var key = event.keyCode || event.charCode || 0;
console.log(key, event.metaKey);
अपने आप पर x दबाने पर यह आउटपुट हो जाएगा 120, false
। Pressing + x दबाने पर, यह आउटपुट करेगा120, true
यह केवल सफारी में काम करता है - क्रोम नहीं
इलिया के डेटा पर आधारित, मैंने मैक पर संशोधक कुंजियों का समर्थन करने के लिए एक वेनिला जेएस लाइब्रेरी लिखी: https://github.com/MichaelZelensky/jsLbooks/blob/master/macKeys.js
बस इसे इस तरह उपयोग करें, जैसे:
document.onclick = function (event) {
if (event.shiftKey || macKeys.shiftKey) {
//do something interesting
}
}
मैक पर क्रोम, सफारी, फ़ायरफ़ॉक्स, ओपेरा पर परीक्षण किया गया। कृपया जांचें कि क्या यह आपके लिए काम करता है।
JQuery का उपयोग करने वाले लोगों के लिए, महत्वपूर्ण घटनाओं से निपटने के लिए एक उत्कृष्ट प्लगइन है:
⌘+ Sऔर Ctrl+ कैप्चर करने के लिए Sमैं इसका उपयोग कर रहा हूं:
$(window).bind('keydown.ctrl_s keydown.meta_s', function(event) {
event.preventDefault();
// Do something here
});
यहाँ है कि मैं इसे 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()
यदि आप Vuejs का उपयोग करते हैं, तो बस इसे vue-shortkey plugin द्वारा बनाएं, सब कुछ सरल होगा
https://www.npmjs.com/package/vue-shortkey
v-shortkey="['meta', 'enter']"·
@shortkey="metaEnterTrigged"