Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   hover через 1 секунду (https://javascript.ru/forum/dom-window/25869-hover-cherez-1-sekundu.html)

Грабовский 18.02.2012 13:35

hover через 1 секунду
 
Доброго времени суток, уважаемые программисты!

Есть элемент div id=hovcl, при наведении на него под ним появляется другой div id=kont position=absolute, при отведении от элемента id=kont исчезает. Это всё работает.

Проблема в том что каждый раз когда мышка проскальзывает id=hovcl появляется id=kont (т.е. вывод kont не планировалось).

Как сделать так что б метод hover вступал в действие после того как пройдёт 1 секунда после наведения на элемент id=hovcl ? :help:

tadjik1 18.02.2012 16:14

если это работает на жс, то можно просто через сетинтервал:

setInterval(function(){
 $('#kont').show();
}, 1000);

Shaci 18.02.2012 16:24

Цитата:

Сообщение от Грабовский (Сообщение 158257)
Доброго времени суток, уважаемые программисты!

Есть элемент div id=hovcl, при наведении на него под ним появляется другой div id=kont position=absolute, при отведении от элемента id=kont исчезает. Это всё работает.

Проблема в том что каждый раз когда мышка проскальзывает id=hovcl появляется id=kont (т.е. вывод kont не планировалось).

Как сделать так что б метод hover вступал в действие после того как пройдёт 1 секунда после наведения на элемент id=hovcl ? :help:

Накатал по быстрому - вроде работает

<html>
<head>
<style type = "text/css">
#base {
position:relative;
width:200px;
height:100px;
background-color:blue;
}
#temp {
position:absolute;
width:50px;
height:50px;
background-color:red;
display:none;
}
</style>
</head>
</html>
<body>
<div id = "base"><div id ="temp"></div></div>
<script>
//ф-ция для эмуляции событий mouseenter/mouseleave в старых браузерах
function isOutside(e, parent) {
  var relatedTarget = e.relatedTarget;
  if (!relatedTarget) {    
    relatedTarget = (e.type == 'mouseout') ? e.toElement : e.fromElement;
  }  
  while (relatedTarget && relatedTarget !== parent) {
    relatedTarget = relatedTarget.parentNode;
  }
  return !relatedTarget ;
}   
    
var base = document.getElementById("base");
var temp = document.getElementById("temp");

var timerId;
function makeVisible(elem) {
    elem.style.display = "block";
}

base.onmouseover = function(e){
    e = e || event;
    if (!isOutside(e, this)) return; // отсечь событие
    timerId = setTimeout(function() {makeVisible(temp)}, 1000);    
}
base.onmouseout = function(e){     
    e = e || event;
    if (!isOutside(e, this)) return; // отсечь событие
    clearTimeout(timerId);
    temp.style.display = "none";
}
</script>

Грабовский 18.02.2012 17:58

Всё работает идеально.
Спасибо, Shaci.


Часовой пояс GMT +3, время: 17:17.