Visualizzazione risultati 1 fino 4 di 4

Discussione: Javascript in conflitto!

  1. #1
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito Javascript in conflitto!

    Salve ragazzi!
    Stavo ottimizzando alcune cose sul sito e integrando alcuni comodi javascript.
    Mi sono appena accorto che questo codice:
    (eliminati commenti e righe vuote esclusivamente per ottimizzare l'altezza del post)
    http://www.javascriptkit.com/script/...rldclock.shtml
    Codice:
    if (document.all||document.getElementById)
    document.write('<span id="worldclock" style="font:bold 16px Arial;"></span><br />')
    zone=0;
    isitlocal=true;
    ampm='';
    function updateclock(z){
    zone=z.options[z.selectedIndex].value;
    isitlocal=(z.options[0].selected)?true:false;
    }
    function WorldClock(){
    now=new Date();
    ofst=now.getTimezoneOffset()/60;
    secs=now.getSeconds();
    sec=-1.57+Math.PI*secs/30;
    mins=now.getMinutes();
    min=-1.57+Math.PI*mins/30;
    hr=(isitlocal)?now.getHours():(now.getHours() + parseInt(ofst)) + parseInt(zone);
    hrs=-1.575+Math.PI*hr/6+Math.PI*parseInt(now.getMinutes())/360;
    if (hr < 0) hr+=24;
    if (hr > 23) hr-=24;
    ampm = (hr > 11)?"PM":"AM";
    statusampm = ampm.toLowerCase();
    hr2 = hr;
    if (hr2 == 0) hr2=12;
    (hr2 < 13)?hr2:hr2 %= 12;
    if (hr2<10) hr2="0"+hr2
    var finaltime=hr2+':'+((mins < 10)?"0"+mins:mins)+':'+((secs < 10)?"0"+secs:secs)+' '+statusampm;
    if (document.all)
    worldclock.innerHTML=finaltime
    else if (document.getElementById)
    document.getElementById("worldclock").innerHTML=finaltime
    else if (document.layers){
    document.worldclockns.document.worldclockns2.document.write(finaltime)
    document.worldclockns.document.worldclockns2.document.close()
    }
    setTimeout('WorldClock()',1000);
    }
    window.onload=WorldClock
    mi crea problemi con quest'altro nonostante abbiano due scopi totalmente diversi:
    http://javascript.about.com/library/bltick2.htm
    Codice:
    var tWidth='300px';
    var tHeight='25px';
    var tcolour='#ffffcc';
    var moStop=true;
    var fontfamily = 'arial,sans-serif';
    var tSpeed=3;
    var content='Are you looking for loads of useful information <a href="http:\/\/javascript.about.com\/">About Javascript<\/a>? Well now you\'ve found it.';
    var cps=tSpeed; var aw, mq; var fsz = parseInt(tHeight) - 4; function startticker(){if (document.getElementById) {var tick = '<div style="position:relative;width:'+tWidth+';height:'+tHeight+';overflow:hidden;background-color:'+tcolour+'"'; if (moStop) tick += ' onmouseover="cps=0" onmouseout="cps=tSpeed"'; tick +='><div id="mq" style="position:absolute;left:0px;top:0px;font-family:'+fontfamily+';font-size:'+fsz+'px;white-space:nowrap;"><\/div><\/div>'; document.getElementById('ticker').innerHTML = tick; mq = document.getElementById("mq"); mq.style.left=(parseInt(tWidth)+10)+"px"; mq.innerHTML='<span id="tx">'+content+'<\/span>'; aw = document.getElementById("tx").offsetWidth; lefttime=setInterval("scrollticker()",50);}} function scrollticker(){mq.style.left = (parseInt(mq.style.left)>(-10 - aw)) ?parseInt(mq.style.left)-cps+"px" : parseInt(tWidth)+10+"px";} window.onload=startticker;
    cioè il primo (worldclock) continua a funzionare bene sempre e comunque ma il secondo (marquee per i bannerini) non viene visualizzato nonostante sia presente nel sorgente della pagina).
    Disattivando il worldclock allora il marquee torna a funzionare.
    Potete aiutarmi a risolvere e renderli quindi compatibili?
    grazie anticipatamente, cordiali saluti darkwolf
    PS per adesso essendo più importante il marquee con i bannerini ho dovuto disattivare il worldclock.
    PPS ho già provato altri svariati script per il marquee ma andavano in conflitto per la troppa somiglianza di codice con la urlobox scorrevole.
    Non ho trovato/provato al momento altri worldclock script.
    Per il marquee preferisco usare javascript sia per la validazione W3C che per una totale compatibilità crossbrowser.
    Se vedete l'urlo scorrevole ad esempio è si validato, in quanto richiamato tramite document.write in javascript, ma non si arresta al passaggio del mouse con Opera. Per questo avrei preferito usare esclusivamente javascript anche per l'urlo ma non ne ho ancora trovati di compatibili/utili per quest'ultimo.
    Ultima modifica di darkwolf : 15-03-2008 alle ore 04.50.53

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    La butto lì: prova a controllare se sui due script hai variabili o funzioni con lo stesso nome e visibilità globale (ovvero sono accessibili da qualsiasi punto del codice). L'inconveniente di JavaScript è che, quando ne colleghi due o più, devi accertarti di questo, pena l'errore di "dichiarazione duplicata".

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    il metodo più brutale per separare i due è di inglobarli in due dichiarazioni di funzione, in modo da metterli in "ambienti" separati, ed eseguirli all'istante:
    Codice:
    (function(){  .... codice primo script .... })()
    (function(){  ... codice secondo script ... })()
    occhio alle varie parentesi

  4. #4
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    La butto lì: prova a controllare se sui due script hai variabili o funzioni con lo stesso nome e visibilità globale (ovvero sono accessibili da qualsiasi punto del codice). L'inconveniente di JavaScript è che, quando ne colleghi due o più, devi accertarti di questo, pena l'errore di "dichiarazione duplicata".
    Stammi bene...
    Grazie ma... non ho capito bene bene cosa intendi
    Colpa mia che conosco poco il javascript, fondamentalmente faccio copia e incolla e al massimo modifico qualcosina
    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    il metodo più brutale per separare i due è di inglobarli in due dichiarazioni di funzione, in modo da metterli in "ambienti" separati, ed eseguirli all'istante:
    Codice:
    (function(){  .... codice primo script .... })()
    (function(){  ... codice secondo script ... })()
    occhio alle varie parentesi
    devo metterli su un unico *.js quindi e usare fuction?
    Mo provo, vediamo se ho capito bene
    Grazie!
    -
    Edit!
    Non va purtroppo!
    Ho preso spunto anche da alcune ricerche su google ma il marquee appare rimanendo fermo però e indicando a firebug centinaia di errori che continuano ad aumentare ad altissima velocità.
    Inoltre ho visto adesso che gli script usano già le "function" ma ho la sensazione che il worlclock sia errato (ad esempio non finisce con ";")...

    -
    Edit!
    Ho realizzato una paginetta per essere sicuro che il problema sia isolato a questi due script.
    Confermato adesso, vi posto la pagina sintetizzata così se qualcuno riesce a farli convivere...
    Ecco il codice:
    Codice:
    <html>
    <head>
    </head>
    <body>
    <!-- HORIZONTAL MARQUEE SCROLLER ... BEGIN -->
    <script language="javascript">
    var tWidth='300px';
    var tHeight='25px';
    var tcolour='#ffffcc';
    var moStop=true;
    var fontfamily = 'arial,sans-serif';
    var tSpeed=3;
    var content='Are you looking for loads of useful information <a href="http:\/\/javascript.about.com\/">About Javascript<\/a>? Well now you\'ve found it.';
    var cps=tSpeed; var aw, mq; var fsz = parseInt(tHeight) - 4; function startticker(){if (document.getElementById) {var tick = '<div style="position:relative;width:'+tWidth+';height:'+tHeight+';overflow:hidden;background-color:'+tcolour+'"'; if (moStop) tick += ' onmouseover="cps=0" onmouseout="cps=tSpeed"'; tick +='><div id="mq" style="position:absolute;left:0px;top:0px;font-family:'+fontfamily+';font-size:'+fsz+'px;white-space:nowrap;"><\/div><\/div>'; document.getElementById('ticker').innerHTML = tick; mq = document.getElementById("mq"); mq.style.left=(parseInt(tWidth)+10)+"px"; mq.innerHTML='<span id="tx">'+content+'<\/span>'; aw = document.getElementById("tx").offsetWidth; lefttime=setInterval("scrollticker()",50);}} function scrollticker(){mq.style.left = (parseInt(mq.style.left)>(-10 - aw)) ?parseInt(mq.style.left)-cps+"px" : parseInt(tWidth)+10+"px";} window.onload=startticker;
    </script>
    
    <table border="0" width="200" cellspacing="0" cellpadding="3">
    <form name="where">
    <tr><td width="100%">
    <select name="city" size="1" onchange="updateclock(this);"> 
    <option value="" selected>Local time</option>
    <option value="0">London GMT</option> 
    </select>
    </td></tr>
    <tr><td width="100%">
    <!-- Drop Down World Clock- By JavaScript Kit (http://www.javascriptkit.com)  BEGIN -->
    <script language="JavaScript">
    
    if (document.all||document.getElementById)
    document.write('<span id="worldclock" style="font:bold 16px Arial;"></span><br />')
    zone=0;
    isitlocal=true;
    ampm='';
    function updateclock(z){
    zone=z.options[z.selectedIndex].value;
    isitlocal=(z.options[0].selected)?true:false;
    }
    function WorldClock(){
    now=new Date();
    ofst=now.getTimezoneOffset()/60;
    secs=now.getSeconds();
    sec=-1.57+Math.PI*secs/30;
    mins=now.getMinutes();
    min=-1.57+Math.PI*mins/30;
    hr=(isitlocal)?now.getHours():(now.getHours() + parseInt(ofst)) + parseInt(zone);
    hrs=-1.575+Math.PI*hr/6+Math.PI*parseInt(now.getMinutes())/360;
    if (hr < 0) hr+=24;
    if (hr > 23) hr-=24;
    ampm = (hr > 11)?"PM":"AM";
    statusampm = ampm.toLowerCase();
    hr2 = hr;
    if (hr2 == 0) hr2=12;
    (hr2 < 13)?hr2:hr2 %= 12;
    if (hr2<10) hr2="0"+hr2
    var finaltime=hr2+':'+((mins < 10)?"0"+mins:mins)+':'+((secs < 10)?"0"+secs:secs)+' '+statusampm;
    if (document.all)
    worldclock.innerHTML=finaltime
    else if (document.getElementById)
    document.getElementById("worldclock").innerHTML=finaltime
    else if (document.layers){
    document.worldclockns.document.worldclockns2.document.write(finaltime)
    document.worldclockns.document.worldclockns2.document.close()
    }
    setTimeout('WorldClock()',1000);
    }
    window.onload=WorldClock
    </script>
    
    </td></form></tr></table>
    <br />
    <!-- id="ticker" serve a richiamare il marquee -->
    <div id="ticker"></div>
    <br />fine.<br />
    <!-- purtroppo perchè il marquee sia visibile è necessario isolare lo script per l'orologio -->
    </body>
    </html>
    Disponibile anche qui: darkwolf.altervista.org* (link rimosso)
    Ultima modifica di darkwolf : 27-12-2009 alle ore 01.50.37

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •