jQuery Draggable()和键盘控件

Bar*_*der 9 html css jquery jquery-ui

嘿那里,我有一个页面,启用了jQuery Draggable()#person#person受限制#map.

(链接到插件:http://docs.jquery.com/UI/Draggables/draggable)

但是,我还使用键盘上的箭头键添加了控件.现在,他们一起玩得很好,直到我到达受限区域(边缘#map)的边缘.

如果我正在拖动,那么#person得到约束#map- 如果我使用箭头键,则#person可以超出边缘#map.

如何约束箭头键和拖动键?

我的键盘控制代码:

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

                        });
                        break;
                            }
});
Run Code Online (Sandbox Code Playgroud)

****p !!****欢呼.

[编辑]请有人吗?[/编辑]

Bla*_*ise 10

如果有人觉得有点懒,这就是我刚刚编写的(简化):

$('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();
}
Run Code Online (Sandbox Code Playgroud)


cda*_*ata 8

不幸的是,jQuery UI Draggable没有公开任何方法来手动更改元素的位置.使用键盘移动时,您必须手动跟踪#个人的位置,并在超过#map的范围时停止移动.

您可以使用jQuery方法(如.offset().position()方法)来查找元素的可靠位置.

例如:

$(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;
            }
        }
    }
);
Run Code Online (Sandbox Code Playgroud)