2011-09-26 104 views

回答

2

不,只需跟踪mousemove事件并持续保存当前位置以防发生键盘事件。在每一个mousemove事件在全局变量

+3

感谢您提供不依赖于jQuery的解决方案:p我讨厌jQuery ... –

+0

呵呵,我也是,秘密地做。 :-) –

+0

这又假设用户移动鼠标。当用户单独按下换档键时会发生什么? – arviman

2

缓存鼠标的位置,并使用它时,一个关键的事件触发:

var mousePosition = {x:0, y:0}; 
$(document).bind('mousemove',function(mouseMoveEvent){ 
mousePosition.x = mouseMoveEvent.pageX; 
mousePosition.y = mouseMoveEvent.pageY; 
}); 
$(document).bind('keyup', function(keyUpEvent){ 
    $('body').append($('<p/>').text('x:' + mousePosition.x + ' * y: ' + mousePosition.y)); 
}); 

JSBIN:http://jsbin.com/uxecuj/4

的JavaScript没有jQuery的:

var mousePosition = {x:0, y:0}; 
document.addEventListener('mousemove', function(mouseMoveEvent){ 
    mousePosition.x = mouseMoveEvent.pageX; 
    mousePosition.y = mouseMoveEvent.pageY; 
}, false); 

document.addEventListener('keyup', function(keyUpEvent){ 
    var divLog = document.querySelector('#log'), 
     log = 'x:' + mousePosition.x + ' * y: ' + mousePosition.y, 
     p = document.createElement('p').innerHTM = log; 
    divLog.appendChild(p); 
}, false); 
+0

这只会触发'keyup'上的函数。我相信当用户按下键时它应该改变。而且,当用户不移动鼠标时,'mousemove'事件不会被触发。因此,当用户只按下键时,mousePosition对象的属性不会被设置。 – arviman

+0

这与您选择答案相同。你盲目讨厌jQuery – Mohsen

+0

哦,我没有问这个问题。我个人喜欢jQuery。 – arviman

0

如果你正在使用jQuery,你可以做到以下几点(假设你有一个图片id="wheelImage"position是设置为absolute),在你的keydown事件中写入以下内容。这里我们使用传递给任何处理程序的全局属性pageX和pageY。你也可以使用jQuery的shiftKey属性来检查shift键是否被按下。

$().keydown(function(e) { 
    if (e.shiftKey) { 
    e.preventDefault(); 
    $('#wheelImage').css('left',e.pageX).css('top', e.pageY); 
    } 
}); 
0

缓存鼠标位置。

var x = 0, y = 0; 
document.addEventListener('mousemove', function(e){ 
    x = e.pageX 
    y = e.pageY; 
}, false); 

document.addEventListener('keyup', function(e){ 
    console.log(x + ' ' + y); 
}, false); 

或与JS忍者图书馆。

var x = 0, y = 0; 
$(document).mousemove(function(e){ 
    x = e.pageX 
    y = e.pageY; 
}); 
$(document).keypressed(function() { 
    console.log(x + ' ' + y); 
}); 
+1

用jQuery。因为它真棒:) – rooney

+0

这个线程得到了很多jQuery的爱/恨,我不知道6年后的人站在哪里:) – Patrick

+1

什么是jQuery? – rooney

1

这里的POJS相当于其他的答案是跨浏览器的回IE 6(也可能IE 5,但我没有它测试了)。甚至没有全局变量:

function addEvent(el, evt, fn) { 
    if (el.addEventListener) { 
    el.addEventListener(evt, fn, false); 
    } else if (el.attachEvent) { 
    el.attachEvent('on' + evt, fn); 
    } 
} 


(function() { 
    var x, y; 
    window.onload = function() { 
    addEvent(document.body, 'mousemove', function(e) { 
     // Support IE event model 
     e = e || window.event; 
     x = e.pageX || e.clientX; 
     y = e.pageY || e.clientY; 
    }); 

    // Show coords, assume element with id "d0" exists 
    addEvent(document.body, 'keypress', function() { 
     document.getElementById('d0').innerHTML = x + ',' + y; 
    }); 
    } 
}()); 

但还有更大的问题。如果可以接收键盘输入的元素被聚焦(输入,textarea等),则仅调度键事件。另外,如果用户在不移动鼠标的情况下滚动屏幕,则坐标可能是错误的。

另一种解决方案是使用CSS将自定义动画替换为光标。