2010-11-01 5 views
0

Je le panneau de diapositive suivante, j'ai bricolé à l'aide des tutoriels etc ...Jquery ajouter un clic pour faire glisser le panneau?

$(document).ready(function() { 

$(".dropdown dt a").click(function() { 
    $(".dropdown dd #panel").slideDown(150); 
}); 

$(".dropdown dd #panel a").click(function() { 

    $(".dropdown dd #panel").slideUp(150); 

}); 

var myTimeout = null; 
$(".dropdown").bind("mouseleave", function() { 
    myTimeout = window.setTimeout(function() { 
     $(".dropdown dd #panel").slideUp(150); // <-- 1000ms 
    }, 1000);$('.dropdown dt a').removeClass('active'); 
}); 

$(".dropdown dd #panel").bind("mouseenter",function() { 
    window.clearTimeout(myTimeout); 
}); 

});

Cependant, je n'arrive pas à comprendre comment cliquer pour faire apparaître le panneau.

Actuellement, vous cliquez et le panneau glisse vers le bas, vous allez dans le panneau et à l'extérieur et il glisse vers le haut.

Je veux ajouter qu'une fois que vous avez cliqué pour afficher le panneau, vous pouvez cliquer pour le fermer aussi?

Vous avez donc deux façons de le fermer, en éloignant la souris ou en cliquant à nouveau sur le bouton. Peut-être ajouter une classe active pour que je puisse avoir une flèche ou quelque chose qui change pour s'ouvrir puis se fermer?

Quelqu'un aide-t-il en ajoutant un clic pour faire glisser la fonction de sauvegarde?

Un grand merci si vous pouvez :)

Thanks guys. 

ajouter votre code Essayé Brian mais a réussi à briser complètement, je ne mis évidemment pas au bon endroit :(

modifier

Ajout des conseils Brians ...

$(document).ready(function() { 



$(".dropdown dt a").click(function(){ 
    if($(".dropdown dd #panel").hasclass('open'){ 
     $(".dropdown dd #panel").slideDown(150).addClass('open'); 
    } else { 
     $(".dropdown dd #panel").slideUp(150).removeClass('open'); 
    } 
});   


$(".dropdown dd #panel a").click(function() { 
    $(".dropdown dd #panel").slideUp(150).removeClass('open');; 
}); 

var myTimeout = null; 
$(".dropdown").bind("mouseleave", function() { 
    myTimeout = window.setTimeout(function() { 
     $(".dropdown dd #panel").slideUp(150); // <-- 1000ms 
    }, 1000);$('.dropdown dt a').removeClass('active'); 
}); 

$(".dropdown dd #panel").bind("mouseenter",function() { 
    window.clearTimeout(myTimeout); 
}); 

});

Répondre

0

Vous aurez besoin de suivre l'état du panneau parce que vous avez deux déclencheurs de fermeture (donc un simple écouteur à bascule ne suffira pas). Vous pouvez ajouter une variable js (ok, mais pas génial) ou utiliser une classe (meilleure) pour la suivre. Ensuite, conditionnellement test vous êtes à des clic auditeurs pour déterminer ce qu'il faut faire:

$(".dropdown dt a").click(function(){ 
    if($(".dropdown dd #panel").hasClass('open'){ 
     $(".dropdown dd #panel").slideDown(150).addClass('open'); 
    } else { 
     $(".dropdown dd #panel").slideUp(150).removeClass('open'); 
    } 
}); 

Assurez-vous que vous ajoutez la méthode removeClass à l'auditeur près que vous avez sur la balise d'ancrage intérieur ainsi:

$(".dropdown dd #panel a").click(function() { 
    $(".dropdown dd #panel").slideUp(150).removeClass('open');; 
}); 
+0

Merci les gars, j'ai ajouté votre suggestion ci-dessus Brian, mais j'ai réussi à le casser tout à fait, je suppose que je l'ai mis au mauvais endroit :( – Jezthomp

+0

Vous avez probablement besoin de changer le nom de classe de 'ouvert' à 'actif' (j'ai utilisé ' ouvert 'à des fins de démonstration.) Si vous voulez poster une démo rapide sur jsFiddle ou assez de vous êtes balisage et CSS ici (tant qu'il est axé sur ce problème particulier), il serait utile dans le débogage. –

+0

J'ai également remarqué une faute de frappe dans mon extrait de code (ça aurait dû être 'hasClass' au lieu de 'hasclass'). C'est ce qui arrive quand je code sans débogueur ... –

Questions connexes