当按下换档时,JS限制鼠标轴移动(对于可拖动元素)

时间:2010-07-28 05:50:00

标签: javascript jquery jquery-ui draggable

按下换档按钮时,我希望用户只能向上/向下或向左/向右移动鼠标。 我目前的粗略想法是在按下换档时拦截所有动作,并使用事件模拟来进一步传递所需的事件(仅包含所需的轴移动)。 我使用jQuery Draggable,所以其他想法是确定何时按下shift并限制draggable本身但这可能需要调查可拖动的代码并且可能是耗时的。 任何想法如何以更优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

通过应用可拖动限制解决(仅在FF中测试):

     function applyDragRestriction(event, prevPosition) {
            if ($( ".componentPlaced" ).draggable( "option", "axis" )) return;
            if (Math.abs(event.clientX - prevPosition.x) < Math.abs(event.clientY - prevPosition.y)) {
                $('.componentPlaced').draggable({ axis: 'y' });
            } else {
                $('.componentPlaced').draggable({ axis: 'x' });
            }
        }

    function applyShiftHandler(event) {
        if (isShiftDown) applyDragRestriction(event, oldMousePositions);
        oldMousePositions = {x: event.clientX, y: event.clientY};
    }

    function checkShiftDown(event) {
        if (event.keyCode == KeyEvent.DOM_VK_SHIFT) {
           isShiftDown = true;
        }
    }

    function checkShiftUp(event) {
        if (event.keyCode == KeyEvent.DOM_VK_SHIFT) {
            cancelDragRestriction();
            isShiftDown = false;
        }
    }

function cancelDragRestriction() {
    $('.componentPlaced').draggable({ axis: null });
}