2012-05-09 5 views
0

Привет, ребята, я работаю над своим первым веб-сайтом, и я пытаюсь реализовать скользящее меню, используя jquery.Использование MouseOver и MouseOut

Это то, что получил до сих пор:

  <a href="javascript:void(0);"onmouseover="ShowBox();" onmouseout="HideBox();"">Show box<a> 
     <script type="text/javascript"> 
     function ShowBox() 
     { 
      $("#SlideMenu").slideDown(); 
     } 
     function HideBox() 
     { 
      $("#SlideMenu").slideUp(); 
     } 
     </script> 

Когда я MouseOver контроль мое меню скользит вниз, но скользит назад автоматически. Что бы я хотел, это дать пользователю время выбора и опции из меню, и если он этого не сделает, я хочу, чтобы меню закрывалось, как только мышь покидает элемент управления.

Любая идея, почему это не работает? Спасибо заранее.

+0

Что делать, когда уходит мышь или парить элемент? Выдает ли ошибка? –

+0

нет, он просто действует так, как если бы мышь находилась вдали от элемента управления, хотя я вообще ничего не сделал – phadaphunk

ответ

2

ли ваш материал без встроенного JS, и не забудьте закрыть <a> элемент и использовать готовую функцию

<a id="test">Show box</a> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#test").on({ 
      mouseenter: function() { 
      $("#SlideMenu").slideDown(); 
      }, 
      mouseleave: function() { 
      $("#SlideMenu").slideUp(); 
      }, 
      click: function(e) { 
      e.preventDefault(); 
      } 
     }); 
    }); 
</script> 

FIDDLE

+0

только что изменил мой код для этого, но я больше не получаю никаких эффектов. просто ящик Show Box – phadaphunk

+0

@PhaDaPhunk - добавлен скрипт, чтобы показать его работу, это то, что вы после? – adeneo

+0

Прекрасно работает в скрипке. Совсем нет в моем коде. Я использую точный код – phadaphunk

0

Если вы используете JQuery, это будет правильный путь идти о нем:

<a href="#" id="showBoxHref">Show box</a> 

<script type="text/javascript"> 
    $("#showBoxHref").hover(function() { 
     $(this).slideDown(); 
    }, function() { 
     $(this).slideUp(); 
    }); 
</script> 

(просто копировать/вставить это, и он должен работать)

+0

Это не работает. Теперь я вообще не сползаю. Нужно ли добавлять событие в тег ? – phadaphunk

+0

Нет, вам нужно увидеть мой ответ и сначала закрыть элемент. – adeneo

+0

Упс, пара типографских, фиксация. @adeneo: Спасибо за улов. –

1

Как вы используете JQuery Я считаю, что было бы полезно для вас, чтобы использовать что-то подобное:

$("#box").hover(
    function() { 
     //.stop() to prevent propagation 
     $(this).stop().animate({"bottom": "200px"}, "fast");     
    }, 
    function() { 
     $(this).stop().animate({"bottom": "0px"}, "fast");     
    } 
); 

что это будет означать, что в то время как мышь находится над меню, меню будет находиться в открытом положении. Когда мышь выйдет из меню, она закроется. Очевидно, измените id, а также значения CSS анимации в соответствии с вашими потребностями :)!

Вот рабочий пример: http://jsfiddle.net/V3PYs/1/

+0

Зачем использовать анимацию, когда вы можете просто использовать 'slideDown()' и 'slideUp()'? Кроме того, вы не указали, что вам нужно предоставить элементу '' идентификатор 'box' для того, чтобы выше работало. –

+0

@ElliotBonneville Использование анимации позволяет легко изменить его. мог бы его меню скользить вверх, влево, вниз, вправо, исчезать, исчезать и т. д. Но вы правы, это устраняет необходимость в кнопке для переключения меню. Упомянем, что спасибо :) – Jack

1

На самом деле здесь нет проблем - скрипт делает именно то, что вы ему сказали. Тем не менее, из того, что я понимаю, то, что вы хотите для того, чтобы меню оставалось открытым, когда вы покидаете элемент «триггер» , если пользовательская мышь теперь находится над меню. Попробуйте это:

<script type="text/javascript"> 
var timeout=250;//timeout in milliseconds to wait before hiding the menu 
var menuMouseout; 
$(document).ready(function() { 
    $("#trigger").hover(function(){ 
     $("#SlideMenu").slideDown(); 
    }, function(){ 
     menuMouseout=setTimeout("$('#SlideMenu').slideUp();", timeout); 
    }); 

    $("#SlideMenu").hover(function(){ 
     clearTimeout(menuMouseout); 
    }, function(){ 
     menuMouseout=setTimeout("$('#SlideMenu').slideUp();", timeout); 
    }); 
}); 
</script> 

Таким образом, пользователь остается некоторое время после того, как передвигая мышь из элемента триггера, чтобы попасть в меню. Возможно, вам придется поиграть с таймаутом, но это должно сработать. Я тестировал это и, похоже, работаю. Просто убедитесь, что в случае необходимости оберните это в $(document).ready, чтобы убедиться, что все элементы загружены и готовы.

Демо: http://www.dstrout.net/pub/menu.htm

+0

+1 для отступов! – adeneo

+0

такой же здесь код youre отлично работает в этом примере. Не в моем коде ... это странно – phadaphunk

+0

Вы не изменили идентификатор в коде от #trigger до того, какой фактический идентификатор вашего элемента запуска? Познакомьтесь с моей демонстрацией, чтобы убедиться, что вы ничего не пропустили, так как это работает на вас. –