Script

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Geoffrey

Script

Message par Geoffrey »

Bonjour a tous

J'ai un probleme d'execution de script dans Firefox (Alors que sur IE ca fonctionne mais je veut pas IE)
Voila le script en question:
<head>
<script language="javascript" type="text/javascript">
function makevisible(cur,which)
{
if(document.getElementById)
{
if (which==0)
{
if(document.all)
cur.filters.alpha.opacity=100
else
cur.style.setProperty("-moz-opacity", 1, "");
}
else
{
if(document.all)
cur.filters.alpha.opacity=40
else
cur.style.setProperty("-moz-opacity", .4, "");
}
}
}
</script>
</head>

<body>
<!-- REPETEZ CET EXEMPLE SUR TOUTES VOS IMAGES -->
<A HREF=http://.........><IMG SRC="MON IMAGE" BORDER=0 WIDTH=320 HEIGHT=400 style="filter:alpha(opacity=40); -moz-opacity: .4;" onMouseover="makevisible(this,0)" onMouseout="makevisible(this,1)"></a><noscript><a href="http://..............">compteur live</a></noscript>
</body>
Merci d'avance pour votre aide
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: Script

Message par calimo »

Salut,
Plutôt que de détecter le navigateur avec des if (document.all), détecte directement les fonctionnalités (if (cur.filter), if(cur.style), etc.) :wink:
Geoffrey

Re: Script

Message par Geoffrey »

C'est a dire ?
Bobe
Iguane
Messages : 742
Inscription : 28 juil. 2003, 21:29

Re: Script

Message par Bobe »

Ce qu’il veut dire, c’est que ce code mériterait une révision. document.all est obsolète et non-standard, son équivalent standard, document.getElementById(), est supporté par tous les navigateurs du marché. -moz-opacity aussi est obsolète et ne fonctionnera pas. Il faut l’utiliser sans le préfixe -moz-.
« La vie d’un geek est un combat perpétuel contre l’imperfection »
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: Script

Message par calimo »

Effectivement, je veux dire que tu testes document.all (les if(document.all) pour savoir si tu as affaire à IE, pour ensuite utiliser les propriétés cur.filters.alpha ou cur.style.setProperty selon le navigateur. Ce type de codage est voué à l'échec : certains navigateurs vont répondre vrai à if(document.all) et seront détectés dans IE alors qu'ils ne sont pas IE et n'ont pas cur.filters.alpha.
Il faut donc détecter directement les propriétés elles-mêmes : cur.filters etc.

Code : Tout sélectionner

if (cur.filters) {cur.filters.…} else { cur.style.… }
Mais bon, après il faudra encore jongler avec tout ça, les -moz-opacity, opacity et autres. C'est typiquement le genre de situation où une librairie d'abstraction comme jQuery devient extrêmement utile, et te permettra d'avoir un code beaucoup plus propre avec le comportement séparé du contenu.

En HTML :

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
<title>Demo</title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="monscriptjquery.js"></script>
</head>

<body>
<p><a href="…" class="alter_opacity"><img src="…" alt="il faut retranscrire le contenu de l'image ici" /></a></p>
</body>
</html>
On ne fait qu'appeler le javascript dans "head", mais le balisage n'est plus pollué par le javascript.
(N'oublie pas d'indiquer le type de document et de remplacer le alt par un texte alternatif utile)

Et dans monscriptjquery.js :

Code : Tout sélectionner

// On définit les fonctions appelées lorsque la souris survole ou quitte l'élément
mouseOverOpacity = function() {
	// voir http://api.jquery.com/css/#css-map
	$(this).css({opacity: 0.4})
}
mouseOutOpacity = function() {
	$(this).css({opacity: 1})
}

// Quand le document est prêt (ready), définir les actions au survol (hover)
$(document).ready(function() {
	// voir http://api.jquery.com/hover/
	$(".alter_opacity").hover(mouseOverOpacity, mouseOutOpacity)
});
L'opacité au survol s'appliquera à toutes les images de la classe "alter_opacity" automatiquement sans que tu n'ait besoin de changer quoi que ce soit en javascript (ce n'est plus vraiment du javascript). jQuery s'occupe lui-meme de gérer l'opacité dans un maximum de navigateurs (la page d'accueil indique IE 6.0+, FF 2+, Safari 3.0+, Opera 9.0+, Chrome). Tu y gagnes la séparation du contenu et du comportement, le tout quasi gratuitement (pour 26Ko, ça ne vaut vraiment plus la peine de s'embêter).

Il faut juste penser à télécharger la librairie et la placer au bon endroit (ici dans le même dossier que la page web), et le tour est joué !
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: Script

Message par calimo »

Au passage, tu obtiendrais probablement le même effet en faisant en CSS :

Code : Tout sélectionner

.alter_opacity:hover {
	-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
	filter: alpha(opacity=40);
	-moz-opacity: .4;
	opacity: .4;
}
Pas besoin de javascript pour si peu ;-)

Source: QuirksMode.org
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités