2013-03-07 18 views
15

Kuvvet düzenimde düğümlere yönelik tuş vuruşu olaylarına yanıt vermek istiyorum. Düşünebildiğim "tuş vuruşu", "tuşa basma", "anahtar", "tuşlar" ın tüm türevlerini eklemeyi denedim, ancak bunların hiçbiri ateş etmiyor. Fare olaylarım iyi ateş ediyor. D3 kaynağında herhangi bir tuş vuruşu olayı bulamadım .... tuş vuruşlarını yakalamanın bir yolu var mı?D3 güç düzeninde tuş vuruşu olaylarını nasıl yakalarım?

 nodes.enter().append("circle") 
      .on("click", function(d) { return d.clickHandler(self); }) 
      .on("mouseover", function(d) { return d.mouseOverHandler(self); }) 
      .on("mouseout", function(d) { return d.mouseOutHandler(self); }) 
      .on("keyup", function(d) { 
       console.log("keypress", d3.event); // also tried "keyup", "keydown", "key" 
      }) 
      .classed("qNode", true) 
      .call(force.drag); 

cevap

52

Burada sorun odaklanma olmayan öğelere klavye olayları katmaya çalışıyoruz düşünüyorum, (bu durumda gövde) bir odaklanabilir öğesine bir keydown olayı eklemeyi deneyin:

d3.select("body") 
    .on("keydown", function() { ... 

burada mesela d3.event.keyCode için, d3.event özelliklerini kullanabilir veya daha fazla uzman durumlarda, d3.event.altKey, d3.event.ctrlKey, d3.event.shiftKey vb ..

th baktığımızda için olabilir e KeyboardEvent Documentation da yardımcı olabilir.

Burada klavye etkileşimi ile basit keman yaptık

:

var currentObject = null; 
: Geçerli nesneyi 'seçeneğini' için bir değişken oluşturarak unsurları svg bu klavye etkileşimleri uygulamak için bu uzatabilirsiniz http://jsfiddle.net/qAHC2/292/

.on("mouseover", function() {currentObject = this;}) 
.on("mouseout", function() {currentObject = null;}); 

Şimdi bu mevcut obj kullanabilirsiniz:

Ardından uygun fare olayı yöntemleri sırasında bu mevcut nesne referansı güncellemek Klavye etkileşimlerinizde daha önce ayarlanmış. Bu iyi çalışır http://jsfiddle.net/qAHC2/295/

+0

ama ben işlemek istediğiniz öğenin beni almaz:

burada Uygulamasına bir jsfiddle bu. Tuş vuruşu olayı gerçekleştiğinde imleç altında hangi SVG elemanının olduğunu nasıl bilebilirim? Bu amaç için –

+1

, elemanlarınıza bir "mouseover" olay dinleyicisi eklemenizi öneririm, daha sonra bu fonksiyonda tuşa basmalarını test ederim, ancak bu sorunun ideal bir çözüm olduğundan emin değilim. – Josh

+0

Tüm olay işleme altyapısını yeniden oluşturmadan bir "mouseover" olayındaki tuş basışları için? –

İlgili konular