Ist es möglich, die Mausposition mit JavaScript nach dem Laden der Seite ohne Mausbewegungsereignis zu ermitteln (ohne die Maus zu bewegen)?
Antworten
Zu viele Anzeigen?Hier ist meine Lösung. Sie exportiert window.currentMouseX y window.currentMouseY Eigenschaften, die Sie überall nutzen können. Es verwendet zunächst die Position eines schwebenden Elements (falls vorhanden) und achtet dann auf Mausbewegungen, um die richtigen Werte zu setzen.
(function () {
window.currentMouseX = 0;
window.currentMouseY = 0;
// Guess the initial mouse position approximately if possible:
var hoveredElement = document.querySelectorAll(':hover');
hoveredElement = hoveredElement[hoveredElement.length - 1]; // Get the most specific hovered element
if (hoveredElement != null) {
var rect = hoveredElement.getBoundingClientRect();
// Set the values from hovered element's position
window.currentMouseX = window.scrollX + rect.x;
window.currentMouseY = window.scrollY + rect.y;
}
// Listen for mouse movements to set the correct values
window.addEventListener('mousemove', function (e) {
window.currentMouseX = e.pageX;
window.currentMouseY = e.pageY;
}, /*useCapture=*/true);
}())
Composr CMS Quelle: https://github.com/ocproducts/composr/commit/a851c19f925be20bc16bfe016be42924989f262e#diff-b162dc9c35a97618a96748639ff41251R1202
Ja, das ist möglich.
Wenn Sie dem Dokument ein "Mouseover"-Ereignis hinzufügen, wird es sofort ausgelöst und Sie können die Mausposition ermitteln, natürlich nur, wenn sich der Mauszeiger über dem Dokument befindet.
document.addEventListener('mouseover', setInitialMousePos, false);
function setInitialMousePos( event ) {
console.log( event.clientX, event.clientY);
document.removeEventListener('mouseover', setInitialMousePos, false);
}
Zuvor war es möglich, die Mausposition über window.event
aber das ist jetzt veraltet.
Ich habe eine horizontale/vertikale Suche implementiert (zuerst ein Div voller vertikaler Links, die horizontal angeordnet sind, dann ein Div voller horizontaler Links, die vertikal angeordnet sind, und einfach sehen, welches den Hover-Status hat) wie Tim Downs Idee oben, und es funktioniert ziemlich schnell. Leider funktioniert es nicht auf Chrome 32 auf KDE.
jsfiddle.net/5XzeE/4/