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