Bonjour,
Après avoir suivis le tuto calendrier, je souhaiterais savoir comment est-il possible de faire afin que les "events" en mode hover puissent, lors d'un click sur le jour de l'"events", rester affichés pendant un certain délais (H.S. afin de pouvoir mettre un lien sur chaques events).
Aussi afin d'éviter que les utilisateur soit obligé d'attendre la fin de se délais, leur permettre lors d'un autre click n'importe où sur la page arrété cet affichage définit ci-dessus (pour revenir en mode affichage par hover initial).
J'ai testé avec des fonctions comme celle-ci, mais rien y fait:
<script type="text/javascript">
$(document).ready(function(){
$(td).click(function () {
$('.events').live("click", function() {
.show() .delay(5000);
});
});
$(body).click(function () {
$('.events').die("click");
});
});
</script>
Partie du HTML concerné:
<td <?php if($time == strtotime(date('Y-m-d'))): ?> class="today" <?php endif; ?>>
<div class="relative">
<div class="day"><?php echo $d; ?></div>
</div>
<div class="daytitle">
<span class="programme">Programme du </span><?php echo $date->days$w-1]; ?><?php echo $d; ?> <?php echo $date->months$m-1]; ?>
</div>
<ul class="events">
<div class="poleevent">
<?php if(isset($events$time]))
{
?>
<div class="star1"><?php echo '<img src="images/star1.png" />';?></div>
<?php
foreach($events$time] as $e)
{
?>
<li><?php echo $e; ?> :</li>
<?php
}
}
?>
</div>
<div class="titrevent">
<?php if(isset($eventsb$time]))
{
foreach($eventsb$time] as $eb)
{
?>
<li><?php echo $eb; ?></li>
<?php
}
}
?>
</div>
</ul>
</td>
Partie du CSS concerné:
table{ border-collapse:collapse;}
table td{ border:1px solid #A3A3A3; width:40px; height:40px;}
table td.today{ border:2px solid #D90000; width:40px; height:40px;}
table td.padding{ border:none;}
table td:hover{ background:#DFDFDF; cursor:pointer;}
table th{ font-weight:normal; color:#A8A8A8;}
table td .day{ position:absolute; color:#8C8C8C; bottom:-20px; right:5px; font-weight:bold; font-size:20px;}
table td .events{ position:relative; width:72px; height:0px; margin:-20px 0px 0px; padding:0px;}
table td .events li{ width:1px; height:1px; float:left; background:#fff; /*+border-radius:4px;*/ -moz-border-radius:4px; -webkit-border-radius:4px; -khtml-border-radius:4px; border-radius:4px 4px 4px 4px; margin-left:0px; overflow:hidden; text-indent:-3000px; }
table td:hover .events{ position:absolute; left:568px; top:0px; width:442px; list-style:none; margin:0px; padding:11px 0px 0px;}
table td:hover .star1{ display:none;}
table td:hover .events .poleevent li{ height:30px; line-height:30px; border-bottom:1px solid #D6D6D6; padding-left:6px; text-indent:0; background:none; width:588px;}
table td:hover .events .titrevent li{ height:31px; line-height:31px; padding-left:21px; text-indent:0; background:none;width:490px; }
table td .daytitle{ display:none;}
table td:hover .daytitle{ position:absolute; left:546px; top:-36px; width:442px; list-style:none; margin:0px 0px 0px 16px; padding:0px; color:#D90000; font-size:20px; display:block; font-weight:bold;}
.clear{ clear:both;}
Merci pour vos réponses
Je te mets une solution qui utilise les classes plutot que show() / hide() mais le principe est le meme. Par contre j'ai pas pigé quels sont les sélecteurs a utiliser pour les trucs a cliquer et a ceux a afficher, donc faudra adapter a ton cas particulier:
L'idée est
Le code ressemble a quelque chose comme ca :
$(document).ready(function(){
$('.events').click(function(e){
// Affiche ton truc en lui ajoutant une classe
$( /*...*/ ).addClass('display');
// Lance un timer pour cacher ton truc en lui retirant la classe apres 5s
setTimeout( function(){
$( /*...*/ ).removeClass('display');
}, 5000);
});
$('body').click(function(e){
// Détecte un click sur le body
// Vérifier que c'est pas sur ton truc qu'on click
// Enleve la classe 'display' pour fermer les trucs
if ( e.target.class != 'display' ) {
$('.display').removeClass('display');
}
});
});
u><strong>@Vallyan:</strong</u>
Merci pour ta réponse, malheureusement cela ne change rien.
Voilà en images ce que cela fait à l'heure actuelle que ce soit avec mon code initial ou celui de ta réponse.
Phase 1: souris en dehors du calendrier:
Phase 2: souris pointant sur une date avec "events":
Phase 3: souris traversant le tableau pour aller en direction des "events" à gauche (H.S. afin de pouvoir cliquer dessus) donc sortant de la case du jour:
Phase 3bis: rendu de ce que je souhaiterais voir afficher pendant un laps de temps (exemple: 5s le temps de cliquer sur un des events afficher à gauche) et pouvant être "die" si je clique n'importe ou pour revenir à la phase 1 ou 2:
En gros pour donner plus de précision à mon soucis, mes events en classe hover (hover.events (cf. table td:hover .events de mon css) apparaissent au survol de la souris dès que je passe sur un n'importe quel case du calendrier, chose que je souhaite conserver. L'idée est lorsque je clique et non-survol, mes events s'affichant avec le hover reste fixe pendant 5s *me permettant de pouvoir cliquer sur l'un de ces events (en lien) pour me rediriger via un <a href> sur une autre page.
* le sujet ne concerne pas cela, mais cela permets de comprendre la finalité globale de ce que je souhaite faire.
Merci par avance pour vos réponses.
OK, si je comprends bien:
Si c'est ca, je suggere que:
Tu instancie un bouléen quelque part dans ton script, au chargement de la page.
var freeze = false;
Dans ton code pour afficher le panneau de droite au survol, vérifie que cette variable est a false
$('td').mousehover(function(e){
if (!freeze) {
/ Code pour afficher le panneau de droite /
}
});
Lorsque tu cliques sur un td, mets la variable a true pour 5 secondes. Ceci empêchera l'update du panneau de droite au survol pendant ces 5 secondes
$('td').click(function(e){
freeze = true;
setTimeout(function{
freeze = false;
}, 5000);
});
Déjà merci pour ta deuxième réponse et ta réactivité pour la poster.
Donc tu as très bien saisis ce que je souhaite faire.
Si je te comprends correctement, il faudrait que je supprime la partie hover de mon css, et que je traite cette partie via une fonction.
Bien que le terme "instancier un booléen" ne me parle pas trop étant donné que je débute en php/jquery (allo google dessine-moi une instanciation booléenne^^), je vais tenter de partir dans cette direction, et te tiens au jus dès que possible (dans les jours qui viennent soit demain ou après-demain).
Question subsidiaire: que représente "(e)" dans "function (e)", est-ce "mon event[time]as e ", ou est-ce que cela est inhérent à la funtion tout simplement, ou lié au target de ta première réponse?
Je te remercie encore pour ta réponse.