renovations
This commit is contained in:
parent
fbc63034a4
commit
5fb0e36f13
79 changed files with 686 additions and 766 deletions
|
@ -4,16 +4,15 @@
|
|||
|
||||
В браузере нет способа "просто получить" текущие координаты. Это может сделать обработчик события, в данном случае `mousemove`. Поэтому нужно будет поставить обработчик на `mousemove` и при каждом движении запоминать текущие координаты, чтобы `setInterval` мог раз в 100мс сравнивать их.
|
||||
|
||||
Можно обойтись и без `setInterval` -- сравнивать координаты при каждом срабатывании `mousemove`. Если передвинулись на маленькое расстояние с последнего `mousemove` -- это "наведение на элемент", а на большое -- игнорируем. Вариант с `setInterval` теоретически надёжнее, но на практике и один `mousemove` работает.
|
||||
Можно обойтись и без `setInterval` -- сравнивать координаты при каждом срабатывании `mousemove`. Если передвинулись на маленькое расстояние с последнего `mousemove` -- это "наведение на элемент", а на большое -- игнорируем. Вариант с `setInterval` лучше с точки зрения производительности -- `mousemove` происходит уж очень часто, но если проверка несложная, то и `mousemove` подойдёт.
|
||||
|
||||
Чтобы наш код не срабатывал чересчур часто, мы будем начинать анализ координат при заходе на элемент, а заканчивать -- при выходе с него.
|
||||
|
||||
Если выход осуществлён, и при этом на элементе зафиксировано "состояние наведения", то нужно вызвать соответствующий обработчик `options.out`.
|
||||
Имеет смысл начинать анализ координат и отслеживание `mousemove` при заходе на элемент, а заканчивать -- при выходе с него.
|
||||
|
||||
Чтобы точно отловить момент входа и выхода, без учёта подэлементов (во избежание мигания), можно использовать `mouseenter/mouseleave`.
|
||||
|
||||
В решении, предложенном ниже, однако, используется `mouseover/mouseout`, так как это позволит легко "прикрутить" к такому объекту делегирование, если потребуется. А, чтобы не было лишних срабатываний, лишние переходы отфильтровываются.
|
||||
|
||||
При этом при обнаружении "наведения на элемент" это запоминается в переменной `isHover` и вызывается `options.over`, а затем, при выходе с элемента, если было "наведение", вызывается `options.out`.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ new HoverIntent({
|
|||
});
|
||||
```
|
||||
|
||||
Демо:
|
||||
Демо этого кода:
|
||||
|
||||
[iframe src="solution" height=110]
|
||||
|
||||
|
|
|
@ -20,16 +20,14 @@
|
|||
|
||||
Для `mouseout` всё наоборот:
|
||||
|
||||
|
||||
<ul>
|
||||
<li>`event.target` -- элемент, с которого ушла мышь, то есть на котором возникло событие.</li>
|
||||
<li>`event.relatedTarget` -- элемент, на который перешла мышь.</li>
|
||||
</ul>
|
||||
|
||||
[online]
|
||||
В примере ниже вы можете наглядно посмотреть события `mouseover/out`, возникающие на всех элементах.
|
||||
|
||||
В примере ниже, если у вас есть мышь, вы можете наглядно посмотреть события `mouseover/out`, возникающие на всех элементах.
|
||||
[codetabs src="mouseoverout" height=220]
|
||||
[/online]
|
||||
|
||||
[warn header="`relatedTarget` может быть `null`"]
|
||||
Свойство `relatedTarget` может быть равно `null`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue