Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    88

    Inserire un contatore dinamico che si aggiorna in tempo reale

    Avrei bisogno di uno script che mi consenta di visualizzare in home page di un sito, un numero che si incrementa progressivamente in tempo reale sulla base del calcolo di una formula già stabilita. Questo rappresenterebbe i Kilowatt prodotti da un impianto fotovoltaico. Per dare un'idea qualcosa di questo tipo: http://www.italiaora.org/. Ho cercato ma non ho trovato nulla di simile...
    Qualcuno ha un'idea?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Prova a partire da qui:

    codice:
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Documento HTML</title>
    <script type="text/javascript">
    /*\
    |*|
    |*|    :: MiniDaemon ::
    |*|
    |*|    Revision #2 - September 26, 2014
    |*|
    |*|    https://developer.mozilla.org/en-US/docs/Web/API/window.setInterval
    |*|    https://developer.mozilla.org/User:fusionchess
    |*|
    |*|    This framework is released under the GNU Lesser General Public License, version 3 or later.
    |*|    http://www.gnu.org/licenses/lgpl-3.0.html
    |*|
    \*/
     
    function MiniDaemon (oOwner, fTask, nRate, nLen) {
        if (!(this && this instanceof MiniDaemon)) { return; }
        if (arguments.length < 2) { throw new TypeError("MiniDaemon - not enough arguments"); }
        if (oOwner) { this.owner = oOwner; }
        this.task = fTask;
        if (isFinite(nRate) && nRate > 0) { this.rate = Math.floor(nRate); }
        if (nLen > 0) { this.length = Math.floor(nLen); }
    }
     
    MiniDaemon.prototype.owner = null;
    MiniDaemon.prototype.task = null;
    MiniDaemon.prototype.rate = 100;
    MiniDaemon.prototype.length = Infinity;
     
        /* These properties should be read-only */
     
    MiniDaemon.prototype.SESSION = -1;
    MiniDaemon.prototype.INDEX = 0;
    MiniDaemon.prototype.PAUSED = true;
    MiniDaemon.prototype.BACKW = true;
     
        /* Global methods */
     
    MiniDaemon.forceCall = function (oDmn) {
        oDmn.INDEX += oDmn.BACKW ? -1 : 1;
        if (oDmn.task.call(oDmn.owner, oDmn.INDEX, oDmn.length, oDmn.BACKW) === false || oDmn.isAtEnd()) { oDmn.pause(); return false; }
        return true;
    };
     
        /* Instances methods */
     
    MiniDaemon.prototype.isAtEnd = function () {
        return this.BACKW ? isFinite(this.length) && this.INDEX < 1 : this.INDEX + 1 > this.length;
    };
     
    MiniDaemon.prototype.synchronize = function () {
        if (this.PAUSED) { return; }
        clearInterval(this.SESSION);
        this.SESSION = setInterval(MiniDaemon.forceCall, this.rate, this);
    };
     
    MiniDaemon.prototype.pause = function () {
        clearInterval(this.SESSION);
        this.PAUSED = true;
    };
     
    MiniDaemon.prototype.start = function (bReverse) {
        var bBackw = Boolean(bReverse);
        if (this.BACKW === bBackw && (this.isAtEnd() || !this.PAUSED)) { return; }
        this.BACKW = bBackw;
        this.PAUSED = false;
        this.synchronize();
    };
    </script>
    <script type="text/javascript">
    var demone = new (function () {
    
        function refreshEq (nIdx, nLength, bBackwards) {
            /*
            * Qui la tua equazione! In questo esempio ho messo solo una semplice
            * differenza tra la data di ogni chiamata e la data in cui il "demone"
            * e' stato avviato (in millisecondi). Cambia il tutto a tuo piacimento!
            */
            this.domNode.innerHTML = Date.now() - this.startedAt;
    
            /*
            * Debug. Rimuovi tranquillamente questa linea: serve solo a mostrarti i
            * parametri di cui puoi disporre in questa funzione...
            */
            this.domNode.innerHTML += "<br \/><br \/>Contatore: " + nIdx + "<br \/>Length: " + nLength + "<br \/>Direzione: " + (bBackwards ? "<em>retrograda</em>" : "<em>anterograda</em>");
        }
    
        /*
        * Page ready...
        */
        function initEq (oEvent) {
            document.getElementById("contenitore").appendChild(demone.owner.domNode);
        }
    
        var oDmn = new MiniDaemon(this, refreshEq, 1000, Infinity);
    
        this.startedAt = Date.now();
        this.domNode = document.createElement("span");
    
        /*
        * Forziamo la prima chiamata in maniera sincrona...
        */
        MiniDaemon.forceCall(oDmn);
    
        /*
        * Avviamo il demone
        */
        oDmn.start();
    
        window.addEventListener ? addEventListener("load", initEq, false) : window.attachEvent ? attachEvent("onload", initEq) : (onload = initEq);
    
        return oDmn;
    
    })();
    </script>
    </head>
    
    <body>
    <div id="contenitore"></div>
    <p><input type="button" onclick="demone.start(false /* optional */);" value="Start" /> <input type="button" onclick="demone.start(true);" value="Backward"> <input type="button" onclick="demone.pause();" value="Pause" /></p>
    </body>
    </html>
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    88
    Grazie per l'aiuto e scusa se ho risposto con un pò di ritardo. Adesso sto lavorando per adeguare il codice ma ho qualche difficoltà, magari te la posto qui e potrai darmi qualche prezioso consiglio.
    Grazie di nuovo, ti devo un caffè... un chilo di caffè.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    88
    Lo sapevo... adesso non riesco ad impostare correttamente la formula. In pratica dovrebbe essere così 763.000 Kw+(0,0000101550 x i millisecondi trascorsi dal 01/01/2014 fino a questo istante) e si ottengono i Kw complessivi prodotti. Qualcuno mi dà un piccolo aiuto?
    Grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    88
    Ci sono riuscitooooooooooooo!
    codice:
    this.domNode.innerHTML = 0,0000101550 * ( Date.now() - this.startedAt) + 763000;
    solo che adesso mi restituisce troppe cifre dopo la virgola e non riesco ad approssimare... o meglio a formattare.
    Qualcuno ha idea di come si possa fare?
    Grazie

  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    usa il metodo var_numero.toFixed(n_decimali)
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    88
    Quote Originariamente inviata da br1 Visualizza il messaggio
    usa il metodo var_numero.toFixed(n_decimali)
    Già provato ma mi restituisce la pagina bianca, forse ho sbagliato ad inserirlo?

  8. #8
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Forse.
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    88
    Forse nel senso che non è adatto o che non l'ho messo al posto giusto?

  10. #10
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Ma come facciamo a diagnosticare una cosa che non vediamo? Non sembra che tu stia chiedendo aiuto tecnico, sembra una chiaccherata con l'astrologo...

    Posta il codice o, se il contenuto non e' contrario al regolamento, un link alla pagina
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.