2010-07-19 28 views
8

Merhaba, #person'da jQuery Draggable() etkinleştirilmiş ve #person'un #map ile kısıtlı olduğu bir sayfam var.jQuery Sürüklenebilir() ve klavye kontrolü

(eklenti link: http://docs.jquery.com/UI/Draggables/draggable)

Ancak, ben de klavyedeki ok tuşları ile kontrol ekledik. Şimdi, hepsi kısıtlı alanın kenarına (#map'un kenarına) ulaşıncaya kadar birlikte iyi oynarlar. Ben sürükleyerek am mı

ardından #person#map için kısıtlı alır - Ben ok tuşlarını kullanırsanız, #person#map kenarından öteye gidebilir.

nasıl sürüklenebilir yanı sıra ok tuşlarını sınırlamak olabilir? Klavye kontrolü için

Kodum:

$(document).bind('keydown',function(e){ //set the keydown function as... 
     switch(e.which) { 
      case 37: $(characterName).animate({ 
          left: '-=40' 
         }, 250, function() { 

         }); 
         break; 
          } 
}); 

**** vay be **** şerefe.

[DÜZENLE] Lütfen kimse? [/ EDIT]

+0

için, test #Map sınırlarını bulmak #person alanın dışına düşüp düşmediğini görmek, eğer yoksa, aksi takdirde, anahtarı ve animasyonunuzu çalıştırın –

+0

NOOB SORU: #map'in sınırlarını bulmak için nasıl giderim? –

+0

Burada görebilirsiniz: http://www.vfstech.com/?p=79 javascript – jasonpgignac

cevap

8

Maalesef, jQuery UI Draggable öğesinin konumunu manuel olarak değiştirmek için herhangi bir yöntem sunmuyor. Klavyeyle hareket ettirirken # kişinin konumunu manüel olarak takip etmeniz ve #map'in sınırlarını aşmak üzere hareket ettirilmeniz gerekir.

.offset() ve .position() gibi jQuery yöntemlerini, öğeler için güvenilir konumlar bulmak için kullanabilirsiniz. Örneğin

:

$(document).bind(
    'keydown', 
    function(event) { 

     switch(event.which) { 
      case 37: { 

       var character = $(characterName); 
       var map = $('#map'); 

       if((character.offset().left - 40) > map.offset().left) { 
        character.animate(
         { 
          left: '-=40' 
         }, 
         250, 
         function(){} 
        ); 
       } 

       break; 
      } 
     } 
    } 
); 
+0

Cheers aracılığıyla bir nesnenin sınırlayıcı dikdörtgeni almak için, bu istediğimi düşündüm ve bu kod doğru - lütfen soruma bakın girilen: ** Bir klavyeye, klavyeden denetleme yoluyla sınırlar koyma. ** –

+0

Sweet =] bu, kelle kazanacağım anlamına mı geliyor? – cdata

+0

tam olarak aynı davranış ihtiyacı vardı anahtar kurulu denetimleri gradable içine yerleşik olmadığını bilmek üzücü. –

9

birisi biraz tembel hissederse, bu sadece (basitleştirilmiş) kodlu budur:

keydown üzerine
$('body').on('keypress', handleKeys); 

function handleKeys(e) { 
    var position, 
     draggable = $('#draggable'), 
     container = $('#container'), 
     distance = 1; // Distance in pixels the draggable should be moved 

    position = draggable.position(); 

    // Reposition if one of the directional keys is pressed 
    switch (e.keyCode) { 
     case 37: position.left -= distance; break; // Left 
     case 38: position.top -= distance; break; // Up 
     case 39: position.left += distance; break; // Right 
     case 40: position.top += distance; break; // Down 
     default: return true; // Exit and bubble 
    } 

    // Keep draggable within container 
    if (position.left >= 0 && position.top >= 0 && 
     position.left + draggable.width() <= container.width() && 
     position.top + draggable.height() <= container.height()) { 
     draggable.css(position); 
    } 

    // Don't scroll page 
    e.preventDefault(); 
} 
+0

ok tuşları, 'keypress' ile her zaman kaydetme' keyup' kullanmak daha iyi olmaz –

İlgili konular