Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Submenu width toggle setTimeout mouseenter/mouseleave

Pagina: 1
Acties:

  • Coen de Zeeuw
  • Registratie: December 2012
  • Laatst online: 15-05-2024
Ik probeer een submenu een width toggle met een setTimeout te geven van bijv. 2 seconden. Ik heb al vanalles geprobeerd maar ben er nog niet uitgekomen. Hopelijk heeft iemand advies... :)

Voorbeeld (zonder de setTimeout): http://jsfiddle.net/vR6gY/ (hover on "Bibliotheek")

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
jQuery('.vertical-menu .sub-menu').hide();      
jQuery('.vertical-menu ul li').mouseenter(
function(){
    setTimeout(function(){
        jQuery('.vertical-menu ul li').not(jQuery('ul', this)).stop();
        jQuery('ul', this).stop(true,true)
        .css({ 'opacity': '0' })
        .animate({ width: 'toggle', 'opacity':'1' },{ queue: false, duration: 350 }); 
    }, 2000);
})  
.mouseleave(
   function(){
    jQuery('ul', this).animate({ width: 'toggle', 'opacity':'0' },{ queue: false, duration: 350 });
});
});

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

In de setTimeout kent hij "this" niet.
Je kan dus het beste eerst "this" in een variabele zetten (voor de timeout):
var self = this;

en deze vervolgens gebruiken in je setTimeout.

edit:
Check je code, hij is was(?) geupdate. 8) Die laatste }); hoort ook nergens bij?

[ Voor 20% gewijzigd door Afvalzak op 14-08-2013 14:18 ]

Last.fm | Code Talks


  • _Jeroen
  • Registratie: November 2010
  • Laatst online: 21-02 10:56
Nog eens goed gekeken naar je code.
Waarom gebruik niet gewoon de hover-functie?


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
$('.vertical-menu ul li').hover(function() {
    var that = this;
    setTimeout(function() {    
        $('ul', that).stop()
        .css({ 'opacity': '0' })
        .animate({ width: 'toggle', 'opacity':'1' },{ queue: false, duration: 350 }); 
       }, 2000);        
}, function() {     
        $('ul', this)
        .animate({ width: 'toggle', 'opacity':'0' },{ queue: false, duration: 350 }); 
});



Fiddle demo

[ Voor 75% gewijzigd door _Jeroen op 14-08-2013 20:42 ]