Итак, я нахожусь в процессе создания полностью клиентского справочного сайта по веб-языку.Проблема, с которой я столкнулся сегодня ... У меня есть боковая панель, которая представляет собой неупорядоченный список терминов, и у них есть прослушиватели событий onmouseover.Я решил, что было бы неплохо добавить задержку перед выполнением и отменить событие во время выполнения, если мышь больше не находится над этим элементом.Это то, что я придумала, но я чувствую, что должен быть лучший путь.
var currentXCoordinate=0
var currentYCoordinate=0
var elementFromCurrentMousePosition=0
function trackCurrentMousePosition(event) {
if (document.elementFromPoint(event.clientX, event.clientY).nodeName=="SPAN") {
elementFromCurrentMousePosition=document.elementFromPoint(event.clientX, event.clientY).parentNode
}
else {
elementFromCurrentMousePosition=document.elementFromPoint(event.clientX, event.clientY)
}
return (currentXCoordinate=event.clientX, currentYCoordinate=event.clientY, elementFromCurrentMousePosition)
}
function initPreview(event, obj) {
arg1=event
arg2=obj
setTimeout("setPreviewDataFields(arg1, arg2)", 100)
}
function setPreviewDataFields(event, obj) {
if ('bubbles' in event) {
event.stopPropagation()
}
else {
event.cancelBubble=true
}
if (elementFromCurrentMousePosition!=obj) {
return 0;
}
, и затем код продолжает делать все то замечательное, что я хочу, если выполнение не былоотменено предыдущим оператором if.Проблема в том, что этот метод, похоже, действительно сильно загружает процессор.
Но чтобы подвести итог ... при загрузке страницы все мои прослушиватели событий зарегистрированы, позиция курсора отслеживается событием onmousemove.Применимые элементы списка имеют событие onmouseover, которое вызывает функцию initPreview, которая просто ожидает определенный период времени перед вызовом фактической функции setPreviewDataFields.Если во время выполнения курсор больше не находится над элементом списка, функция останавливается, возвращая 0 ...
К сожалению, это лучшее, что я мог придумать.Если кто-то может предложить лучшее решение, я был бы очень признателен.