Accueil > Forum > > > > Random... oui mais...
Random... oui mais...
vendredi 25 mars 2011 à 16:45:09 |
Random... oui mais...

momongana
|
Bonjour à tous,
Je voudrais me servir d'un script tout pret, mais je voudrais le transformer, et je n'y arrive pas...
Voici la fonction à modifier :
function AffichePub()
{
if(!affiche)
{
numimage= Math.round(Math.random()*(ejs_banurl.length-1));
document.write ('<A HREF="#" onClick="window.open(ejs_banurl[numimage],\'_blank\')"><IMG SRC="' + ejs_banimageUrl[numimage] + '" BORDER=0 NAME=ejs_banpub></A>')
affiche = true;
}
else
{
if(numimage == (ejs_banurl.length-1))
numimage = 0;
else
numimage++;
document.ejs_banpub.src=ejs_banimageUrl[numimage];
}
setTimeout("AffichePub()",5000);
}
AffichePub();
Ce que je recherche sachant qu'il y à 20 bannieres à "tirer" au hasard.
Lors de l'ouverture d'un site, SA banniere apparait dans un cadre en haut de la page, puis affiche toutes les 5 secondes une autre bannière, qui si cliquée ouvrira le site de la bannière.
Jusque là, pas de problème en remplaçant: numimage= Math.round(Math.random()*(ejs_banurl.length-1));
par numimage= 1 (1er site)
et numimage++; par numimage= Math.round(Math.random()*(ejs_banurl.length-1));
Mon problème c'est que je ne voudrais pas qu'une bannière s'affiche deux fois avant que les 20 bannières s'affichent toutes... Une fois toutes affichées, remise à zéro et on recommence... Me suis-je bien fait comprendre ?
En définitive je désire tirer une banniere au hasard à chaque passage, sans pouvoir tirer deux fois la même avant que les 20 bannières soient passées...
D'avance, merci de votre aide.
________________
L'homme est un apprenti. La douleur est son maitre. Et nul ne se connait. Tant qu'il n'a pas souffert.
Alfred de Musset.
|
|
vendredi 25 mars 2011 à 20:03:21 |
Re : Random... oui mais...

Videopac
|
Bonsoir momongana,
Je pense que le plus simple est de remplacer numimage par un tableau (pense à le déclarer) qui contiendra toutes les valeurs de 0 à n-1. Pour créer ce tableau, utilise 2 boucles for(;;) :
- une première pour initialiser la liste :
for (i=0;i<n;i++) {liste[i]=0;}
- une pour mélanger les éléments par permutations (minimum n/2) :
for (i=0;i<(n/2);i++) {
x1=Math.floor(Math.random*n);
x2=Math.floor(Math.random*n);
temp=liste[x1];
liste[x1]=liste[x2];
liste[x2]=temp;
}
Dans ton cas, n=20 et il faut remplacer ejs_banimageUrl[numimage] par ejs_banimageUrl[liste[numimage]]. Si tu trouve que les éléments ne sont pas suffisamment mélangés, augmente n/2 ... Tu peux re-mélanger le tableau à chaque fois que tu réinitialise ta variable numimage.
J'espère que les explications sont assez claire...
|
|
vendredi 25 mars 2011 à 23:12:16 |
Re : Random... oui mais...

Videopac
|
Oups ... Je viens de voir qu'il y a une petite faute de frappe. C'est :
for (i=0;i<n;i++) {liste[i]=i;} bien sûr
J'ai fait ça dans l'urgence tout à l'heure et je n'avais pas eu le temps de me relire. Désolé.
|
|
samedi 26 mars 2011 à 04:21:24 |
Re : Random... oui mais...

momongana
|
Bonjour et merci de ta réponse hyper rapide...
Le hic, c'est que je suis un jeune homme de 67 ans et que je suis nul en programmation de ce type...
Ou dois-je placer ton code dans le mien, en remplacement de quoi ?
Encore merci
Cordialement
|
|
samedi 26 mars 2011 à 14:41:18 |
Re : Random... oui mais...

Videopac
|
Je te propose de modifier en le remplaçant par ça :
var liste=new Array(ejs_banurl.length);
function melangeListe()
{
var i,x1,x2,temp;
for (i=0;i<ejs_banurl.length;i++)
{
x1=Math.floor(Math.random()*ejs_banurl.length);
x2=Math.floor(Math.random()*ejs_banurl.length);
temp=liste[x1];
liste[x1]=liste[x2];
liste[x2]=temp;
}
}
function AffichePub()
{
var i;
if(!affiche)
{
for (i=0;i<ejs_banurl.length;i++) liste[i]=i;
melangeListe();
numimage= 0;
document.write ('<A NAME=test HREF="#" onClick="window.open(ejs_banurl[liste[numimage]],\'_blank\')"><IMG SRC="' + ejs_banimageUrl[liste[numimage]] + '" BORDER=0 NAME=ejs_banpub></A>')
affiche = true;
}
else
{
if(numimage == (ejs_banurl.length))
{
melangeListe(); // pour remélanger à chaque tour
numimage = 0;
}else
document.ejs_banpub.src=ejs_banimageUrl[liste[numimage]];
numimage++;
}
setTimeout("AffichePub()",5000);
}
AffichePub();
Ça devrait fonctionner. Dans le for de la fonction melangeListe, j'ai mis 'ejs_banurl.length' au lieu de 'ejs_banurl.length/2' (algo d'hier) pour avoir un meilleur mélange sans trop ralentir le script.
Cordialement
|
|
samedi 26 mars 2011 à 18:54:25 |
Re : Random... oui mais...

momongana
|
Bonsoir,
Je ne sais trop comment te remercier de tant de compréhension...
J'ai mis ton algo à la place du mien....
Effectivement à chaque nouvelle ouverture la banniere change... mais c'est tout.
Ce que j'aimerais c'est qu'à l'ouverture du site, la bannière de ce site soit affichée puis toutes les 5 secondes une autre bannière s'affiche à sa place et ainsi de suite jusqu'à ce que les 20 bannières s'affichent toutes sans qu'il y ai deux fois la même... Une fois les 20 bannière affichées on recommence à zéro.
Si je tiens à ce que les 19 bannières aient un tirage aléatoire, c'est pour ne pas "brimer" les dernières bannières qui seraient toujours dernières... et si on quitte le site avant, on ne les verraient jamais !
Une idée de ce que je veux faire : www.pub04.com (mon bigot sur ce site...)
Mille merci !
Cordialement
Raymond
|
|
samedi 26 mars 2011 à 19:03:31 |
Re : Random... oui mais...

momongana
|
Petite précision...
En ce moment et avec mon ancien code, ça fonctionne, a part que la deuxième banniere affichée est chaque fois la même... En cliquant sur une bannière on arrive bien sur le site demandé, et les bannières tournent...
Peut-être une petite rectif quelque part...
A+ et merci encore.
|
|
samedi 26 mars 2011 à 21:56:18 |
Re : Random... oui mais...

Videopac
|
Bonsoir,
A mon avis, mon script fonctionne correctement. Le problème vient du fichier HTML qui l'appelle dans la ligne :
<script language="javascript" src="Enfin,%20de%20la%20Pub%20intelligente%20%21_fichiers/banniere20.js"></script><a href="#" onclick="window.open(bansite[numimage],'_blank')"><img src="Enfin,%20de%20la%20Pub%20intelligente%20%21_fichiers/Image2.jpeg" name="banpub" border="0">
tout ce qui suit la balise </script> est en trop car créé par le script. C'est probablement pour ça que la deuxième bannière est toujours la même. En tout cas, on se retrouve avec deux images portant le même nom (banpub), d'où un probable conflit...
|
|
dimanche 27 mars 2011 à 15:33:36 |
Re : Random... oui mais...

momongana
|
Bonjour,
Dans mon code il y a ceci :
<script language="JavaScript"><!--
var i=0; var j=0;
var msg = "Enfin, de la Pub intelligente !";
var run;
function scroll_control() {
scroll_msg();
if (j<msg.length) {clearTimeout(run);}
j++;
run=setTimeout('scroll_control()',250);
}
function scroll_msg() {
var graal = msg.substring(0 ,i);
document.title = graal;
i++;
}
scroll_control();
-->
</script>
</head>
<body>
<div style="position: absolute; top: 0px; left: 0px; width: 100%; height: 100% ;z-index: -10">
<img src="http://www.pub04.com/images/FondPage.jpg"alt="Fond de la page" />
</div>
<center>
<div style="position: relative; width: 900px; height: 900px; z-index: 2">
<script language="javascript" src="http://www.pub04.com/Bannieres/banniere20.js"></script>
Je ne comprends pas ce que vous me dites plus haut avec :
<script language="javascript" src="Enfin,%20de%20la%20Pub%20intelligente%20%21_fichiers/banniere20.js"></script><a href="#" onclick="window.open(bansite[numimage],'_blank')"><img src="Enfin,%20de%20la%20Pub%20intelligente%20%21_fichiers/Image2.jpeg" name="banpub" border="0">
Ou êtes vous allé "pécher" ce bout de code ?
Je contibue à chercher, mais ce n'est pas évident...
Merci quand même de votre concours...
Cordialement
Raymond
|
|
dimanche 27 mars 2011 à 17:09:58 |
Re : Random... oui mais...

Videopac
|
Bonjour,
Effectivement, j'ai zappé le fait qu'il faut ouvrir la bannière du site avant les autres. Mais la partie que tu demandais (aléatoire qui balaie toutes les images avant de recommencer un cycle) fonctionne correctement (avant de poster hier, j'ai testé mon script avec des photos perso et des liens bidons).
Suite à ton souci, j'ai enregistré ta page en local pour pouvoir modifier le code : c'est là que firefox m'a inséré la portion de code incriminée. Effectivement, elle n'apparaît pas en affichant le code source. Donc désolé que le problème ne vienne pas de là car de mon côté, ça fonctionne correctement sur IE 6 et Firefox 3.6.16...
Est-ce un problème si la bannière du site est la dernière image ??? A priori, non... Dans ce cas, dans ton fichier banniere20.js remplace tout ce qui suit 'affiche=false;' par :
var liste=new Array(bansite.length);
function melangeListe()
{
var i,x1,x2,temp;
for (i=0;i<bansite.length;i++)
{
x1=Math.floor(Math.random()*(bansite.length-1));
x2=Math.floor(Math.random()*(bansite.length-1));
temp=liste[x1];
liste[x1]=liste[x2];
liste[x2]=temp;
}
}
function AffichePub()
{
var i;
if(!affiche)
{
for (i=0;i<bansite.length;i++) liste[i]=i;
// melangeListe(); // mettre ici pour mélanger une seule fois
numimage= bansite.length-1;
document.write ('<A HREF="#" onClick="window.open(bansite[liste[numimage]],\'_blank\')"><IMG SRC="' + banimageUrl[liste[numimage]] + '" BORDER=0 NAME=banpub></A>')
numimage++;
affiche = true;
}
else
{
if(numimage == (bansite.length))
{
melangeListe(); // pour remélanger à chaque tour
numimage = 0;
}
document.banpub.src=banimageUrl[liste[numimage++]];
}
setTimeout("AffichePub()",5000);
}
AffichePub();
En local, sur le fichier pris depuis ton site, ça fonctionne exactement comme tu veux sous IE et Firefox : image 'la pub des indépendants' puis les 20 autres aléatoirement avant de recommencer.
Bon courage (surtout si ça ne marche pas car là je sèche).
Nota : sous Firefox, il y a une console d'erreur dans le menu Outils qui peux t'indiquer l'emplacement d'une erreur dans un script...
|
|
Cette discussion est classée dans : affiche, math, random, ejs, numimage
Répondre à ce message
Sujets en rapport avec ce message
Onclick + math.random [ par juki_webmaster ]
Bonjour, Je suis en train d'ameliorer toutes mes protections par images (anti robot), je voulais proposer aux visiteurs de changer/mettre a jour l'im
Flash Aléatoire [ par XCONTROL90 ]
Bonjour je cherche un code depuis 2 jours pour charger de manière aléatoire des anims flash au même titre que des images. Mais je trouve pas !! j'ai u
réaliser une boucle pour obtenir plusieurs résultat ... [ par popy29 ]
bonjour,je cherche à obtenir plusieurs résultats ou n résultat différents à partir d'une fonction mais je ne trouve pas comment faire pour la boucle.
Effet neige a l'invers [ par lnazcal ]
Bonjour,Comment le sujet le dit si bien je cherche un javascript qui fasse un effet boules dans un verre de cola.Je me suis dit que il faudré changer
Ordre d'affichage dans des listes [ par cubhyphen ]
Hello, dans le cadre de mon travail, j'ai du développer un site intranet. Je n'ai acces a aucun logiciel de creation et ce n'est quasi que des fichier
Probleme rotation de bannieres [ par NiXiT ]
Bonjour, je cherche a faire tourner mes bannieres automatiquement toutes les 10 sec. Voici le code que j'ai fait : fichier pub.js : Code: banner
J'ai une colle : comment actualiser des infobulles ? [ par feuh7 ]
Bonjour à tous, Je suis webmaster d'un site et 'léger' informaticien mais, cette fois je suis au pied du mur. Je m'explique : - j'ai instauré un sys
Pb d'infobulle presque résolu [MAJ 20-09-2005] [ par feuh7 ]
(MAJ 20-09-2005) Bonjour à tous, Je suis webmaster d'un site et 'léger' informaticien mais, cette fois je suis au pied du mur. Je m'explique : - j'
Débutant 100%....Select?? [ par jnbrunet ]
Salut,voici le code de mon select: Choisissez un objet <option value="1"&
Pb d'actualisation [ par feuh7 ]
Bonjour, Je m'occupe du site http://www.laprod.fr et j'ai mis en place un systeme de News convivial. Des images tournent, pointent vers un lien etc..
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|