jQuery: Timer starten und abbrechen: hover intent

3. Dezember 2012 / Code / jQuery

×Info: This post is older than 2 years! Displayed information may be outdated!

Für JS-Hover-Menus gibt es dieses schöne Plugin. Das kann man aber auch schnell und schlank lösen.

Beispiel

# ein Menu soll erst nach 500ms ausklappen
# beim Verlassen des hover-Bereichs soll der Timer abbrechen
# das Menu soll nicht ausklappen

var myMenu = {
  
  intent : 500,
  
  state : undefined,
  
  openMenu : function () {
    $.data(this, 'timer', setTimeout(function() {
      $('#myMenu').stop(true, true).animate({
        height: '150px'
      }, 'fast');
      // console.log('menu successfully opened');
      // todo: set state in object to enabled
    }, myMenu.intent));
  },
  
  closeMenu : function () {
      clearTimeout($.data(this, 'timer'));
      $('#myMenu').stop(true, true).animate({
        height: '0'
      }, 'fast');
  },
  
  bindHoverEvents : function () {
  
    $('#menuTrigger').on('mouseenter', function() {
      // console.log('start timer for animation');
      myMenu.openMenu();
    });
    
    $('#menuTrigger').on('mouseleave', function() {
      // console.log('close menu animation or abort timer');
      myMenu.closeMenu();
    });
    
  },
  
  init : function () {
    this.bindHoverEvents();
  }

}

window.myMenu = myMenu;
myMenu.init();