Bir Mac'in Cmdanahtarı JavaScript ile nasıl yakalanır ?
Bir Mac'in Cmdanahtarı JavaScript ile nasıl yakalanır ?
Yanıtlar:
DÜZENLEME: 2019 tarihi itibariyle e.metaKey
olan MDN uyarınca tüm büyük tarayıcılarda desteklenir .
Windows'da, ⊞ Windowsanahtar "meta" anahtarı olarak kabul edilmesine rağmen, tarayıcılar tarafından bu şekilde yakalanmayacağını unutmayın.
Bu yalnızca MacOS / klavyelerdeki komut tuşu içindir.
Shift/ Alt/ Öğesinden farklı olarak Ctrl, Cmd(“Apple”) tuşu değiştirici bir anahtar olarak kabul edilmez; bunun yerine, bir tuşa basıldığında ve ardından tuşa basıldığında dinlemeniz keydown
/ keyup
kaydetmeniz gerekir event.keyCode
.
Ne yazık ki, bu anahtar kodları tarayıcıya bağlıdır:
224
17
91
(Sol Komut) veya 93
(Sağ Komut)Bu bilgiyi öğrendiğim JavaScript Madness: Keyboard Events makalesini okumak isteyebilirsiniz .
keydown
olaylarda çalıştığını unutmayın keyup
.
Ayrıca event.metaKey
, tuş takımı olaylarıyla çalışıyorsanız olayın özelliğine de bakabilirsiniz . Benim için harika çalıştı! Burada deneyebilirsiniz .
.metaKey
gerçekten de en son Firefox, Safari ve Opera'da çalışıyor. Chrome'da, .metaKey
Kontrolü etkinleştirir (Komutta değil).
keydown
ama DEĞİLDİR keyup
ya da DEĞİLDİR keypress
.
Safari'nin son sürümünde (7.0: 9537.71) başka bir tuşla birlikte basılırsa komut tuşunu algılayabildiğinizi buldum. Örneğin, ⌘ + x: algılamak istiyorsanız x tuşunu algılayabilir VE event.metaKey'in true olarak ayarlanıp ayarlanmadığını kontrol edebilirsiniz. Örneğin:
var key = event.keyCode || event.charCode || 0;
console.log(key, event.metaKey);
X'e tek başına bastığınızda, bu çıktı verir 120, false
. ⌘ + x tuşlarına bastığınızda,120, true
Bu yalnızca Safari'de çalışıyor gibi görünüyor - Chrome'da değil
Ilya'nın verilerine dayanarak, Mac'te değiştirici anahtarları desteklemek için bir Vanilla JS kütüphanesi yazdım: https://github.com/MichaelZelensky/jsLibraries/blob/master/macKeys.js
Sadece böyle kullanın, örneğin:
document.onclick = function (event) {
if (event.shiftKey || macKeys.shiftKey) {
//do something interesting
}
}
Mac'te Chrome, Safari, Firefox, Opera'da test edildi. Lütfen sizin için çalışıp çalışmadığını kontrol edin.
JQuery kullanan kişiler için, önemli olayları yönetmek için mükemmel bir eklenti vardır:
GitHub'daki jQuery kısayol tuşları
⌘+ SVe Ctrl+ yakalamak içinS bunu kullanıyorum:
$(window).bind('keydown.ctrl_s keydown.meta_s', function(event) {
event.preventDefault();
// Do something here
});
AngularJS'de nasıl yaptım
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 kullanıyorsanız, sadece vue-shortkey eklentisiyle yapın, her şey basit olacak
https://www.npmjs.com/package/vue-shortkey
v-shortkey="['meta', 'enter']"·
@shortkey="metaEnterTrigged"