jQuery Draggable() and keyboard control

前端 未结 2 1892
故里飘歌
故里飘歌 2021-02-08 17:17

Hey there, I have a page with the jQuery Draggable() enabled on #person and that #person is constrained to #map.

(link to plugin:

2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-02-08 17:54

    If someone feels a bit lazy, this is what I just coded (simplified):

    $('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();
    }
    

提交回复
热议问题