2011-09-26 60 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將自定義動畫替換爲光標。