Позиция мыши отображается на объекте event
, полученном обработчиком события mousemove
, который вы можете присоединить к окну (пузырьки события):
(function() {
document.onmousemove = handleMouseMove;
function handleMouseMove(event) {
var dot, eventDoc, doc, body, pageX, pageY;
event = event || window.event; // IE-ism
// If pageX/Y aren't available and clientX/Y are,
// calculate pageX/Y - logic taken from jQuery.
// (This is to support old IE)
if (event.pageX == null && event.clientX != null) {
eventDoc = (event.target && event.target.ownerDocument) || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0 );
}
// Use event.pageX / event.pageY here
}
})();
(Примечание что тело этого if
будет работать только на старом IE.)
Пример выше в действии - он рисует точки при перетаскивании мышью по странице. (Проверено на IE8, IE11, Firefox 30, Chrome 38.)
Если вам действительно нужно решение на основе таймера, вы комбинируете это с некоторыми переменными состояния:
(function() {
var mousePos;
document.onmousemove = handleMouseMove;
setInterval(getMousePosition, 100); // setInterval repeats every X ms
function handleMouseMove(event) {
var dot, eventDoc, doc, body, pageX, pageY;
event = event || window.event; // IE-ism
// If pageX/Y aren't available and clientX/Y are,
// calculate pageX/Y - logic taken from jQuery.
// (This is to support old IE)
if (event.pageX == null && event.clientX != null) {
eventDoc = (event.target && event.target.ownerDocument) || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0 );
}
mousePos = {
x: event.pageX,
y: event.pageY
};
}
function getMousePosition() {
var pos = mousePos;
if (!pos) {
// We haven't seen any movement yet
}
else {
// Use pos.x and pos.y
}
}
})();
As насколько я знаю, вы не можете получить позицию мыши, не увидев событие, что ответ на другой вопрос о переполнении стека , похоже, подтверждается.
Боковое примечание : Если вы собираетесь делать что-то каждые 100 мс (10 раз / секунду), постарайтесь сохранить фактическую обработку, которую вы выполняете в этой функции очень, очень ограниченно . Это большая работа для браузера, особенно старых Microsoft. Да, на современных компьютерах это не похоже на много, но в браузерах многое происходит ... Итак, например, вы можете отслеживать последнюю позицию, которую вы обработали, и немедленно освободить поручень от обработчика, если позиция hasn ' t изменено.
Кажется, здесь происходят две вещи:
data.json()
не должна быть заключена в tryP
, потому что согласно вашему второму не нарушена Например, он возвращает синхронно (нет await
). Это приведет к тому, что Fluture вызовет TypeError (потому что он ожидает увидеть Promise, но получает значение JSON). Хотя, зная API выборки, data.json()
обычно действительно возвращает обещание, так что, возможно, ваш второй пример не работает, и что-то еще происходит. Что бы это ни было, я подозреваю, что где-то выдается неожиданная Ошибка. Видите ли вы какие-либо другие сообщения об ошибках в вашей консоли, кроме того, который вы опубликовали? encaseP
, Похоже, оригинальному Promise удается поймать эту ошибку и вызвать необработанное отклонение. Это похоже на ошибку регрессии в Fluture, и я скоро исправлю ее. В то же время, если мы дойдем до сути того, что выдает вашу ошибку, вы сможете продолжить, не зависимо от указанного исправления. РЕДАКТИРОВАТЬ: я открыл PR, чтобы исправить второй вопрос: https://github.com/fluture-js/Fluture/pull/310
EDIT2 : Исправление было выпущено под версией 10.3.1. Использование этой версии поможет вам лучше понять, что происходит с проблемой 1
.