1 script ipv 4 scripts

Status
Niet open voor verdere reacties.

yammaski

Gebruiker
Lid geworden
9 mrt 2005
Berichten
284
Dit (werkend zonder fouten) script bevat 4 functies :
[JS]<script type="text/javascript">
<!--
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a.indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a;}}
}

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a)&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>[/JS]
Ik heb dit in een aparte file geplaatst en "Kleurenwaaier_preload.js" genoemd.
Op de paginas waar ik dit nodig heb, plaats ik dan enkel de verwijzing :
<script type="text/javascript" src="Kleurenwaaier_preload.js"></script>

Die paginas zijn gebaseerd op een template. Maar telkens ik de template aanpas, wordt het volledige script terug in de paginas geplaatst.

Hoe los ik dit op, of doe ik het plaatsen van de 4 functies in 1 file fout ?
Alles blijft wel goed werken zonder errors.
 
Laatst bewerkt:
Hoi Yammaski,
Even voor de veiligheid: binnen de "Kleurenwaaier_preload.js" zit niet de html-code:
<script type="text/javascript"><!-- function MM_preloadImages(){ ... enz. //-->?
Dus puur:
[JS]function MM_preloadImages() { //v3.0
... enz.
... t/m
if ((x=MM_findObj(a))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}[/JS]
Daarvan uitgaande:
  • 4 functies in 1 file is niet fout, dat kan gewoon.
  • Met de verwijzing naar de functie is ook niets mis, als die in het template zit.

Vermoeden: het woordelijke script wordt teruggezet, maar óók de verwijzing naar het externe script staat er nog steeds in.
Klopt dat?

Want: "Dreamweaver, I presume?" (de plaatser van die scripts voor image-wisseling bij een hover)
Dan heb je kans dat Dreamweaver:
  • uit de html-code in de pagina merkt dat er een onmouseover="MM_swapImage()" enz. script-aanroep in staat,
  • even controleert of in de <head> van de pagina wel die functie staat (nee dus),
  • er geen flauw benul van heeft dat jij die functie keurig in het externe bestand "Kleurenwaaier_preload.js" hebt gezet,
  • en uit behulpzaamheid het hele gedoe er nog een keer in zet.

Als dit gokje klopt, zou je kunnen proberen om DW om de tuin te leiden door zowel in de aanroep op de pagina's als in het externe script de MM_ prefixen weg te laten.
De functies doen het dan net zo hard, want dit is alleen maar de naam. *)
  • Nattigheid is misschien, dat je dit niet even vlug kan implementeren op al bestaande pagina's.

En (niet helemaal) terzijde: ik vind die javascript-hovers van Dramweaver toch wel behoorlijk uit de tijd. In 2005 hadden browsers (m.n. IE) lang niet de kennis van css die ze nu hebben, en was een js-hover zo gek nog niet om iets cross-browser te krijgen. Maar daar hadden ze toch zo langzamerhand wel gewone css-hovers van kunnen maken?
Dat kan je natuurlijk ook zelf doen, dan is het hele script niet nodig. :)

Met vriendelijke groet,
CSShunter
_____________
*) De MM staat voor MacroMedia, de oorspronkelijke Dreamweaver-maker en-eigenaar voordat Adobe dat werd in 2005.
In de loop der jaren hebben duizenden sites die MM_preloadImages() enz. functies er op staan, en waarschijnlijk laten ze het daarom maar zo.
 
Laatst bewerkt:
Even voor de veiligheid: binnen de "Kleurenwaaier_preload.js" zit niet de html-code:
De code die ik vermelde is degene die in de head van de pagina zelf staat, bij het externe js staat dit er niet bij.

Het is idd Dreamweaver waarmee het gemaakt is. In de body onload staat nogmaals "MM_preloadImages(' .... ').
Dus kan ik misschien beter het script in de head laten staan en het externe verwijderen ?
In het voorbeeld hieronder blijft de body tag dan weer wel gewoon.

De hovers in css maken ... dat lijkt me wat ingewikkeld als je de kleurenwaaier eens bekijkt !?
 
Hoi yammaski,
Dus kan ik misschien beter het script in de head laten staan en het externe verwijderen ?
Ja, zou ik maar doen > zoveel code is het nu ook weer niet dat het erg nadelig zou kunnen zijn voor de pagina-snelheid.
Het enige is, dat het MM_ codeblokje nu op de server op elke pagina staat, wat wat server-ruimte vraagt.
Daar zou je nog van af kunnen komen door het blokje niet als extern javascript aan te roepen, maar als php-include.
  • Zie dit topic.
  • Maar je hebt een .asp site en geen .php site; ik weet niet of iets dergelijks ook met .asp kan.

=======
De hovers in css maken ... dat lijkt me wat ingewikkeld als je de kleurenwaaier eens bekijkt !?
Ah, het gaat om de bekende mooie kikkertjes!
Dan lijkt het me niet alleen ingewikkeld, maar bijkans schier onmogelijk. ;)
  • De kikkervormen zijn vanwege hun overlappingen niet simpel in rechthoekjes te vangen; of je zou er waanzinnig veel opgesplitste kleintjes van moeten maken, en dan, als je het mooi wilt doen, per kleur à la dit:
    waaier-vakjes.png
  • Dat is niet realistisch, dus ben je aangewezen op een image-map.
  • En css-hovers over image-maps werken niet (iig niet cross-browser).
  • Dus ben je aangewezen op javascript voor het hoveren. :)

Met vriendelijke groet,
CSShunter
 
OK ... bedankt weeral csshunter.
:thumb:


Groeten,
Yammaski.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan