Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как реализовать задержку при наведении в меню? (https://javascript.ru/forum/dom-window/35270-kak-realizovat-zaderzhku-pri-navedenii-v-menyu.html)

Stas-ik 05.02.2013 19:11

Как реализовать задержку при наведении в меню?
 
Написал кое-как меню:
$('.menuholder').hover(function()
		{$('.back')
		.animate({"height":"500px"},'1000');
		//.css("height","500px");
	}, function () {
			$('.back')
			.animate({"height":"0px"},'100')
			;});
	$('.menu li').hover(function(){
		$('div.subs div.dl').stop().delay(1000).animate({"marginLeft":"10px"},'2500');
			$('div.back')/*.delay(100)*/
			.animate({"height":"500px"},'1000')
			//.css('height','500px')
			;
		}, function(){
			$('div.subs div.dl').css('marginLeft','-1000px');$('div.back')
			.animate({"height":"0px"},'100')
			;});
});

Само меню отрисовывается так:
<?php if ($categories) {?>
<div class="menuholder">
  <ul class="menu slide">
  <?php foreach ($categories as $category) { ?>
  <li><a href="<?php echo $category['href']; ?>" class="orange"><h2><?php echo $category['name']; ?></h2></a>
    <?php if ($category['children']) { ?>
      <?php for ($i = 0; $i < count($category['children']);) { ?>
      <div class="subs">
        <div class="dl">
            <?php for ($i = 0; $i < count($category['children']); $i++) { ?>
              <?php if (isset($category['children'][$i])) { ?>
              <div class="item">
                <div><a href="<?php echo $category['children'][$i]['href']; ?>"><img alt="<?php echo $category['children'][$i]['name']; ?>" src="<?php echo $category['children'][$i]['image']?>"></a></div>
                <div class="link"><a href="<?php echo $category['children'][$i]['href']; ?>"><?php echo $category['children'][$i]['name']; ?></a></div>
              </div>
              <?php } ?>
          <?php } ?>
        </div>
      </div>
      <?php } ?>
    <?php } ?>
  <?php } ?>
  </li>
  </ul>
<div class="back"></div>
</div>

так вот вопрос таков - как реализовать то, чтобы при наведении на пункт меню, оно появлялось с задержкой. То есть при случайном наведении оно не выскакивало, а требовало наведенного курсора примерно одну секунду?

Sober_exe 06.02.2013 16:39

при hover установить setTimeout(function(){ваша функция}, 1000), если hover теряется, то делать clearTimeout()

Deff 06.02.2013 16:57

Собственно думаю вопрос в "туда-сюда" дергании анимации, а не именно задержки, для этого используем не hover, а
$(Селектор).mouseenter(function(){
     //Код

}).mouseleave(function(){
     //Код
});

Sober_exe 06.02.2013 17:08

в этом случаем при проведении курсора мимо меню, будет дёргаться выпадающий список из меню. При установки задержки хотя бы на 500 миллисекунд, мы избавляемся от дёрганья.
$(Селектор).mouseenter(function(){
     //Код setTimeout
}).mouseleave(function(){
     //Код clearTimeout
});

Deff 06.02.2013 17:55

Sober_exe,
Тестовик - есть ? Глянуть?

Stas-ik 07.02.2013 11:38

тестовика нет, ссылка на сайт - http://belakvamir.by

Stas-ik 07.02.2013 11:42

поменял hover на mouseenter/mouseleave - все работает, но при добавлении setTimeout и clearTimeout - скрипт отказывается работать вообще... буду разбираться скорее всего в синтаксисе что-то упускаю. Только осваиваю JS.

Deff 07.02.2013 12:24

Цитата:

Сообщение от Stas-ik
тестовика нет, ссылка на сайт - http://belakvamir.by

Неудачно организовано
1. Темное полотно фона должно появляться при наведении на обший родитель подменю (по-моему .menuholder );
2. По наведению на li, на уже поставленном темном фоне появляются картинки
3. Картинки не должны выезжать слева! - это Г
Либо вообще не выезжают ( чисто fadeIn) либо выезжают из под клавиш (slideDown)

Stas-ik 07.02.2013 13:58

Цитата:

Сообщение от Deff (Сообщение 232213)
Неудачно организовано
1. Темное полотно фона должно появляться при наведении на обший родитель подменю (по-моему .menuholder );
2. По наведению на li, на уже поставленном темном фоне появляются картинки
3. Картинки не должны выезжать слева! - это Г
Либо вообще не выезжают ( чисто fadeIn) либо выезжают из под клавиш (slideDown)

Спасибо, сделал на fadein. Прошу помощи с задержкой подскажите подробнее как именно следует вставить задержку? а то если провести вдоль меню, то оно открывает .back столько раз, по скольким пунктам меню прошел курсор.

Stas-ik 07.02.2013 14:34

И посоветуйте как более рационально сделать открытие меню по щелчку, а закрытие на mouseleave? Если это возможно.


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