<script>
//Array pour sauvegarder les éléments de la liste qui ont été "survolés" avec la souris
var myArray = [];
//Compteur
var imgCounter = 0;
$(document).ready(function() {
$("li").mouseover(function(event) {
//Sauvegarde l'index de l'élément qui est survolé dans la liste
var index = $("li").index(this);
console.log(index);
//Sauvegarde le nombre total d'éléments dans la liste UL
var liLenght = $("ul").children().length;
console.log(liLenght);
//Si l'index de notre élément n'est pas déjà dans notre Array, on l'ajoute et on augmente le compteur d'1
if (myArray.includes(index) == false) {
myArray.push(index);
imgCounter++;
}
console.log("Vous êtes sur l'image " + (index + 1));
console.log("Array: "+myArray);
console.log("Vous avez vu " + imgCounter + " image(s) sur "+liLenght);
});
});
</script>
En gros, lors d'un mousover, l'index de l'élément de liste survolé est ajouté à un Array, si celui-ci n'est pas encore dedans. En plus de ça on incrémente une variable qui sert de compteur afin de savoir le nombre d'objet qui ont déjà été survolés.
Il te faudra afficher la console dans ton navigateur pour voir ce que ça donne (l'index de l'image survolé, le nombre d'images déjà vues et le nombre d'images total). Je te laisse les implémenter toi-même ensuite dans ton code HTML si la solution te convient
As-tu bien ouvert la console de ton navigateur ? C'est là-dedans que les résultats s'affichent dans le cas de mon code quand tu passes avec ta souris sur les liens (A toi ensuite d'adapter le code pour que ça apparaisse sur ta page HTML à la place de la console )
Vérifie ici sinon, j'ai juste ajouté mon code avec ta partie HTML:
Après quelques modifs j'ai bien un résultat, cependant j'aimerais ne pas à avoir à passer une une puce pour que le compteur .
var myArray = [];
//Compteur
var imgCounter = 0;
$(document).ready(function() {
$("#views_block li a").mouseover(function(event) {
//Sauvegarde l'index de l'élément qui est survolé dans la liste
var index = $("a").index(this);
console.log(index);
//Sauvegarde le nombre total d'éléments dans la liste UL
var liLenght = $("ul#thumbs_list_frame").children().length;
console.log(liLenght);
//Si l'index de notre élément n'est pas déjà dans notre Array, on l'ajoute et on augmente le compteur d'1
if (myArray.includes(index) == false) {
myArray.push(index);
imgCounter++;
}
var div = document.getElementById("compteurphoto");
div.textContent = imgCounter + " / "+liLenght;
});
});
J'ai tenté un load, mais non
- Edité par NoceboNocebo 11 octobre 2018 à 17:51:24
En fait il te suffit de placer la variable qui compte le nombre d'éléments de ta liste (ici "liLenght") à la ligne 6 entre "document.ready" et ton "mousover", comme ceci:
var myArray = [];
//Compteur
var imgCounter = 0;
$(document).ready(function() {
//Sauvegarde le nombre total d'éléments dans la liste UL
var liLenght = $("ul#thumbs_list_frame").children().length;
console.log(liLenght);
$("#views_block li a").mouseover(function(event) {
//Sauvegarde l'index de l'élément qui est survolé dans la liste
var index = $("a").index(this);
console.log(index);
//Si l'index de notre élément n'est pas déjà dans notre Array, on l'ajoute et on augmente le compteur d'1
if (myArray.includes(index) == false) {
myArray.push(index);
imgCounter++;
}
var div = document.getElementById("compteurphoto");
div.textContent = imgCounter + " / "+liLenght;
});
});
De cette manière le nombre d'éléments dans la liste sera automatiquement sauvegardé dans la variable lors du chargement du document, et donc avant même qu'il y ait un mouseover.
En fait il faut que tu changes le contenu de "compteurphoto" au moment où tu charges le document (donc entre le "document.ready" et ton "mousover") ET également que tu le fasses comme c'était le cas dans ta fonction mouseover pour que ce soit actualisé à chaque fois que quelqu'un survole un lien avec sa souris.
Je crois que ton code est légèrement différent maintenant par rapport à celui de ton post d'origine, donc n'hésite pas à poster celui que tu utilises actuellement et qui est mis à jour pour que ce soit plus facile à suivre pour nous (Soit directement dans le post ou soit dans un Jfiddle comme je l'ai fait plus haut).
var myArray = [];
//Compteur
var imgCounter = 0;
$(document).ready(function() {
var liLenght = $("ul#thumbs_list_frame").children().length;
$("#views_block li a").mouseover(function(event) {
//Sauvegarde l'index de l'élément qui est survolé dans la liste
var index = $("a").index(this);
console.log(index);
//Sauvegarde le nombre total d'éléments dans la liste UL
var liLenght = $("ul#thumbs_list_frame").children().length;
console.log(liLenght);
//Si l'index de notre élément n'est pas déjà dans notre Array, on l'ajoute et on augmente le compteur d'1
if (myArray.includes(index) == false) {
myArray.push(index);
imgCounter++;
}
var div = document.getElementById("compteurphoto");
div.textContent = imgCounter + " / "+liLenght;
});
var div = document.getElementById("compteurphoto");
div.textContent = "1" + " / "+liLenght;
});
J'ai fait comme ça et ça fonctionne encore une dernière chose si je commence au milieu il indique 1 au lieu d'indiquer l'image 6 y a t'il une solution pour qu'il prenne en compte les éléments précédents ?
- Edité par NoceboNocebo 11 octobre 2018 à 19:19:33
Ah je vois, je pensais que tu voulais afficher également le nombre d'images qui ont été survolées, mais finalement c'est encore plus simple comme ça, donc plus besoin de l'Array ou ni-même de la variable qui servait de compteur.
Essaie ça :
$(document).ready(function() {
var liLenght = $("ul#thumbs_list_frame").children().length;
$("#views_block li a").mouseover(function(event) {
//Sauvegarde l'index de l'élément qui est survolé dans la liste
var index = $("a").index(this);
console.log(index);
//Sauvegarde le nombre total d'éléments dans la liste UL
var liLenght = $("ul#thumbs_list_frame").children().length;
console.log(liLenght);
var div = document.getElementById("compteurphoto");
div.textContent = index + " / "+liLenght;
});
var div = document.getElementById("compteurphoto");
div.textContent = "1" + " / "+liLenght;
});
$(document).ready(function() {
var liLenght = $("ul#thumbs_list_frame").children().length;
$("#views_block li a").mouseover(function(event) {
//Sauvegarde l'index de l'élément qui est survolé dans la liste
var index = $("a").index(this);
// console.log(index);
//Sauvegarde le nombre total d'éléments dans la liste UL
var liLenght = $("ul#thumbs_list_frame").children().length;
// console.log(liLenght);
var div = document.getElementById("compteurphoto");
div.textContent = index + " / "+liLenght;
// div.textContent = (index + 1) + " / "+liLenght;
});
var div = document.getElementById("compteurphoto");
div.textContent = "1" + " / "+liLenght;
});
Désolée pour la réponse tardive, mais je suis sur plusieurs choses en même temps.
Donc si je change la ligne le compteur ne fonctionne plus du tout
$(document).ready(function() {
var liLenght = $("ul#thumbs_list_frame").children().length;
$("#thumbs_list_frame li a").mouseover(function(event) {
//Sauvegarde l'index de l'élément qui est survolé dans la liste
// var index = $("a").index(this);
$(this).parents('li').index();
// console.log(index);
//Sauvegarde le nombre total d'éléments dans la liste UL
var liLenght = $("ul#thumbs_list_frame").children().length;
// console.log(liLenght);
var div = document.getElementById("compteurphoto");
div.textContent = (index+1) + " / "+liLenght;
// div.textContent = (index + 1) + " / "+liLenght;
});
var div = document.getElementById("compteurphoto");
div.textContent = "1" + " / "+liLenght;
});
J'ai ajouté un script pour faire défiler automatiquement les photos, mon problème est que les puces changent bien, mais pas l'image.
$(window).load(function(){
// Jquery permet de gérer les éléments que tu récupère comme un tableau
// Avec la fonction .eq(X) (qui permet de récupérer un élément précis d'un tableau), ça facilité le tout
var links = $('#views_block li a');
var index = 0;
// L'index de l'élément surligné
setInterval(function(){
// L'index du prochain élément. C'est à dire l'index de l'élément courrant + 1 modulo le nombre de lien.
// Le modulo permet de revenir à 1 une fois arrivé au dernier élément
var nextIndex = (index + 1) % links.length;
// On retire la class au "lien actif"
links.eq(index).removeClass('shown');
// On ajoute la class au prochain lien
links.eq(nextIndex).addClass('shown');
//update display of the large image
if ( links.eq(nextIndex).addClass('shown') ) {
$(document).on('load', '#views_block li a', function(){
displayImage($(this));
});
}
index = nextIndex;
}, 2000);
});
Normalement il suffit de passer sur la pastille pour changer l'image grâce à ce code
$(document).on('mouseover', '#views_block li a', function(){
displayImage($(this));
});
Je n'arrive pas à faire défiler les images automatique en même temps que les pastilles changent.
Afficher nombres d'entrée + x / x
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
merci pour ton aide