Avatar billede Slettet bruger
28. marts 2007 - 09:33 Der er 15 kommentarer og
1 løsning

Konflikt imellem 2 Javascripts - hvad er der mon galt?

Hejsa.

Jeg har 2 stk. Javascripts, som jeg gerne vil bruge på en webside.
Hver for sig virker de fint, men hvis jeg indsætter dem begge 2, virker de ikke - de konflikter åbenbart med hinanden.

Hvem kan hjælpe mig med at justere dem, så de begge to virker samtidig?

Jeg indsætter dem (incl. relevant html-kode) i hver sin kommentar-box herunder, så de er nemmere at overskue:
Avatar billede Slettet bruger
28. marts 2007 - 09:36 #1
Script 01:


<script type="text/javascript">

//Translucent scroller- By Dynamic Drive
//For full source code and more DHTML scripts, visit http://www.dynamicdrive.com
//This credit MUST stay intact for use

var scroller_width='150px'
var scroller_height='115px'
var bgcolor='#E0EFD1'
var pause=3000 //SET PAUSE BETWEEN SLIDE (3000=3 seconds)

var scrollercontent=new Array()
//Define scroller contents. Extend or contract array as needed
scrollercontent[0]='Visit our partner site <a href="http://freewarejava.com">Freewarejava.com </a>for free Java applets!'
scrollercontent[1]='Got JavaScript? <a href="http://www.javascriptkit.com">JavaScript Kit</a> is the most comprehensive JavaScript site online.'
scrollercontent[2]='Link to Dynamic Drive on your site. Please visit our <a href="http://www.dynamicdrive.com/link.htm">links page</a>.'


////NO need to edit beyond here/////////////

var ie4=document.all
var dom=document.getElementById&&navigator.userAgent.indexOf("Opera")==-1

if (ie4||dom)
document.write('<div style="position:relative;width:'+scroller_width+';height:'+scroller_height+';overflow:hidden"><div id="canvas0" style="position:absolute;background-color:'+bgcolor+';width:'+scroller_width+';height:'+scroller_height+';top:'+scroller_height+';filter:alpha(opacity=20);-moz-opacity:0.2;"></div><div id="canvas1" style="position:absolute;background-color:'+bgcolor+';width:'+scroller_width+';height:'+scroller_height+';top:'+scroller_height+';filter:alpha(opacity=20);-moz-opacity:0.2;"></div></div>')
else if (document.layers){
document.write('<ilayer id=tickernsmain visibility=hide width='+scroller_width+' height='+scroller_height+' bgColor='+bgcolor+'><layer id=tickernssub width='+scroller_width+' height='+scroller_height+' left=0 top=0>'+scrollercontent[0]+'</layer></ilayer>')
}

var curpos=scroller_height*(1)
var degree=10
var curcanvas="canvas0"
var curindex=0
var nextindex=1

function moveslide(){
if (curpos>0){
curpos=Math.max(curpos-degree,0)
tempobj.style.top=curpos+"px"
}
else{
clearInterval(dropslide)
if (crossobj.filters)
crossobj.filters.alpha.opacity=100
else if (crossobj.style.MozOpacity)
crossobj.style.MozOpacity=1
nextcanvas=(curcanvas=="canvas0")? "canvas0" : "canvas1"
tempobj=ie4? eval("document.all."+nextcanvas) : document.getElementById(nextcanvas)
tempobj.innerHTML=scrollercontent[curindex]
nextindex=(nextindex<scrollercontent.length-1)? nextindex+1 : 0
setTimeout("rotateslide()",pause)
}
}

function rotateslide(){
if (ie4||dom){
resetit(curcanvas)
crossobj=tempobj=ie4? eval("document.all."+curcanvas) : document.getElementById(curcanvas)
crossobj.style.zIndex++
if (crossobj.filters)
document.all.canvas0.filters.alpha.opacity=document.all.canvas1.filters.alpha.opacity=20
else if (crossobj.style.MozOpacity)
document.getElementById("canvas0").style.MozOpacity=document.getElementById("canvas1").style.MozOpacity=0.2
var temp='setInterval("moveslide()",50)'
dropslide=eval(temp)
curcanvas=(curcanvas=="canvas0")? "canvas1" : "canvas0"
}
else if (document.layers){
crossobj.document.write(scrollercontent[curindex])
crossobj.document.close()
}
curindex=(curindex<scrollercontent.length-1)? curindex+1 : 0
}

function resetit(what){
curpos=parseInt(scroller_height)*(1)
var crossobj=ie4? eval("document.all."+what) : document.getElementById(what)
crossobj.style.top=curpos+"px"
}

function startit(){
crossobj=ie4? eval("document.all."+curcanvas) : dom? document.getElementById(curcanvas) : document.tickernsmain.document.tickernssub
if (ie4||dom){
crossobj.innerHTML=scrollercontent[curindex]
rotateslide()
}
else{
document.tickernsmain.visibility='show'
curindex++
setInterval("rotateslide()",pause)
}
}

if (ie4||dom||document.layers)
window.onload=startit

</script>
Avatar billede Slettet bruger
28. marts 2007 - 09:38 #2
Script 02:

html:
<body onload="init()">

Og lidt mere html-kode. Jeg tror ikke at det er relevant.


js:
<script type="text/javascript">

if (TransMenu.isSupported()) {

    var ms = new TransMenuSet(TransMenu.direction.down, 0, 0, TransMenu.reference.bottomLeft);

document.getElementById("forsiden").onmouseover = function() {
    ms.hideCurrent();
}
 
    var menu2 = ms.addMenu(document.getElementById("traening"));
    menu2.addItem("TRÆNING GENERELT", "trae_gen.asp");
    menu2.addItem("UDHOLDENHEDS-TRÆNING", "#");

document.getElementById("galleri").onmouseover = function() {
    ms.hideCurrent();
}

document.getElementById("diverse").onmouseover = function() {
    ms.hideCurrent();
}

var menu5 = ms.addMenu(document.getElementById("kontakt"));
menu5.addItem("KONTAKT MIG", "kontakt.asp", 0, 0);

document.getElementById("theend").onmouseover = function() {
    ms.hideCurrent();
}   


TransMenu.renderAll();
}
</script>
Avatar billede softspot Forsker
28. marts 2007 - 09:44 #3
Det er givetvis fordi de begge bliver startet af window.onload. Derfor skal du nok sørge for at window.onload kun defineres ét sted og kalder begge initiatliseringsrutiner.

Alternativt skal du sørge for at onload-eventene bliver sat op i en "daisychain", dvs. at et givent onload-event sørger for at kalde det onload-event som var aktivt inden det nye blev defineret...
Avatar billede Slettet bruger
28. marts 2007 - 09:48 #4
Øh... du har sikket ret, men jeg fatter desværre ikke så meget af hvad du skriver...
Præcis hvad skal jeg gøre, synes du?
Avatar billede softspot Forsker
28. marts 2007 - 09:59 #5
For at få en daisychain til at fungere, er du nok nød til at definere alle dine onload-events nogenlunde som vist nedenfor:

var onloadMain = window.onload;
window.onload = function() {
  if(onloadMain) onloadMain();
  init();
}


Variablen onloadMain opbevarer en reference til den funktion som var aktiv onload-funktion inden du definerede den nye. Navnet på denne variabel skal være entydig igennem alle sidens scripts, så derfor bør du vælge navne som afspejler hvor de er defineret.
På samme måde skal du så ændre script 1 f.s.v.a. opsætning af onload-eventet:

if (ie4||dom||document.layers) {
  var onloadScript1 = window.onload;
  window.onload = function() {
    if(onloadScript1) onloadScript1();
    startit();
  }
}
Avatar billede softspot Forsker
28. marts 2007 - 10:05 #6
Dette betyder så, at du skal fjerne det kald til init() som ligger i body-elementet, dvs.

<body onload="init()">

skal ændres til blot at være

<body>
Avatar billede Slettet bruger
28. marts 2007 - 10:07 #7
Jeg kan nogenlunde forstå, hvad du mener. Men jeg fatter desværre stadig ikke helt, hvad jeg skal indsætte/forandre/slette, for at få scriptene til at fungere.

Dog skriver du nederst, at jeg skal ændre dette i script 01:
if (ie4||dom||document.layers) {
  var onloadScript1 = window.onload;
  window.onload = function() {
    if(onloadScript1) onloadScript1();
    startit();
  }
}


Og det tror jeg, at jeg har gjort korrekt herunder:

<script type="text/javascript">

//Translucent scroller- By Dynamic Drive
//For full source code and more DHTML scripts, visit http://www.dynamicdrive.com
//This credit MUST stay intact for use

var scroller_width='150px'
var scroller_height='115px'
var bgcolor='#E0EFD1'
var pause=3000 //SET PAUSE BETWEEN SLIDE (3000=3 seconds)

var scrollercontent=new Array()
//Define scroller contents. Extend or contract array as needed
scrollercontent[0]='Visit our partner site <a href="http://freewarejava.com">Freewarejava.com </a>for free Java applets!'
scrollercontent[1]='Got JavaScript? <a href="http://www.javascriptkit.com">JavaScript Kit</a> is the most comprehensive JavaScript site online.'
scrollercontent[2]='Link to Dynamic Drive on your site. Please visit our <a href="http://www.dynamicdrive.com/link.htm">links page</a>.'


////NO need to edit beyond here/////////////

var ie4=document.all
var dom=document.getElementById&&navigator.userAgent.indexOf("Opera")==-1

if (ie4||dom)
document.write('<div style="position:relative;width:'+scroller_width+';height:'+scroller_height+';overflow:hidden"><div id="canvas0" style="position:absolute;background-color:'+bgcolor+';width:'+scroller_width+';height:'+scroller_height+';top:'+scroller_height+';filter:alpha(opacity=20);-moz-opacity:0.2;"></div><div id="canvas1" style="position:absolute;background-color:'+bgcolor+';width:'+scroller_width+';height:'+scroller_height+';top:'+scroller_height+';filter:alpha(opacity=20);-moz-opacity:0.2;"></div></div>')
else if (document.layers){
document.write('<ilayer id=tickernsmain visibility=hide width='+scroller_width+' height='+scroller_height+' bgColor='+bgcolor+'><layer id=tickernssub width='+scroller_width+' height='+scroller_height+' left=0 top=0>'+scrollercontent[0]+'</layer></ilayer>')
}

var curpos=scroller_height*(1)
var degree=10
var curcanvas="canvas0"
var curindex=0
var nextindex=1

function moveslide(){
if (curpos>0){
curpos=Math.max(curpos-degree,0)
tempobj.style.top=curpos+"px"
}
else{
clearInterval(dropslide)
if (crossobj.filters)
crossobj.filters.alpha.opacity=100
else if (crossobj.style.MozOpacity)
crossobj.style.MozOpacity=1
nextcanvas=(curcanvas=="canvas0")? "canvas0" : "canvas1"
tempobj=ie4? eval("document.all."+nextcanvas) : document.getElementById(nextcanvas)
tempobj.innerHTML=scrollercontent[curindex]
nextindex=(nextindex<scrollercontent.length-1)? nextindex+1 : 0
setTimeout("rotateslide()",pause)
}
}

function rotateslide(){
if (ie4||dom){
resetit(curcanvas)
crossobj=tempobj=ie4? eval("document.all."+curcanvas) : document.getElementById(curcanvas)
crossobj.style.zIndex++
if (crossobj.filters)
document.all.canvas0.filters.alpha.opacity=document.all.canvas1.filters.alpha.opacity=20
else if (crossobj.style.MozOpacity)
document.getElementById("canvas0").style.MozOpacity=document.getElementById("canvas1").style.MozOpacity=0.2
var temp='setInterval("moveslide()",50)'
dropslide=eval(temp)
curcanvas=(curcanvas=="canvas0")? "canvas1" : "canvas0"
}
else if (document.layers){
crossobj.document.write(scrollercontent[curindex])
crossobj.document.close()
}
curindex=(curindex<scrollercontent.length-1)? curindex+1 : 0
}

function resetit(what){
curpos=parseInt(scroller_height)*(1)
var crossobj=ie4? eval("document.all."+what) : document.getElementById(what)
crossobj.style.top=curpos+"px"
}

function startit(){
crossobj=ie4? eval("document.all."+curcanvas) : dom? document.getElementById(curcanvas) : document.tickernsmain.document.tickernssub
if (ie4||dom){
crossobj.innerHTML=scrollercontent[curindex]
rotateslide()
}
else{
document.tickernsmain.visibility='show'
curindex++
setInterval("rotateslide()",pause)
}
}

if (ie4||dom||document.layers) {
  var onloadScript1 = window.onload;
  window.onload = function() {
    if(onloadScript1) onloadScript1();
    startit();
  }
}

</script>


Eller har jeg misforstået noget?
Avatar billede Slettet bruger
28. marts 2007 - 10:09 #8
Jepper, og jeg fjerner:
<body onload="init()"> til blot at være <body>
Avatar billede Slettet bruger
28. marts 2007 - 10:11 #9
Men den første del af din anvisning @: 28/03-2007 09:59:10
forstår jeg ikke hvad jeg skal gøre med. Er det et separat Javascript jeg skal indsætte, eller hvad?

Altså det du skrev her:
For at få en daisychain til at fungere, er du nok nød til at definere alle dine onload-events nogenlunde som vist nedenfor:

var onloadMain = window.onload;
window.onload = function() {
  if(onloadMain) onloadMain();
  init();
}
Avatar billede Slettet bruger
28. marts 2007 - 10:13 #10
Og hvis det er et separat Javascript jeg skal indsætte, skal jeg så indsætte det imellem <head></head> sektionen i html-dokumentet?
Avatar billede softspot Forsker
28. marts 2007 - 10:22 #11
Jeg har ikke lige kunne få øje på init-funktionen nogen steder i den kode du har vist, så jeg ved ikke helt hvordan den passer ind, men du bør lægge den rutine jeg viste i en script-sektion for sig selv i head (eller sammen med noget andet script hvis du har en scriptsektion i forvejen).

<head>
<title>...</title>
<script type="text/javascript">
var onloadMain = window.onload;
window.onload = function() {
  if(onloadMain) onloadMain();
  init();
}
</script>

</head>
<body>
...
Avatar billede Slettet bruger
28. marts 2007 - 10:26 #12
BINGO! Dér var den! Nu triller begge scripts helt perfekt på samme webside! :-)
Avatar billede Slettet bruger
28. marts 2007 - 10:29 #13
Smid et svar, så jeg kan tildele dig de velfortjente points, for en meget stor hjælp til mig!
Og mange tusinde tak for hjælpen, softspot! :-)
Avatar billede softspot Forsker
28. marts 2007 - 10:33 #14
Velbekomme :)
Avatar billede softspot Forsker
28. marts 2007 - 10:39 #15
Tak for point :)
Avatar billede Slettet bruger
28. marts 2007 - 11:13 #16
Velbekommen, men det er søremig mig som takker. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester