Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777

    genera frasi casuali senza ripeterle

    questo script permette di far apparire una frase diversa ogni tot secondi in modo casuale
    voglio fare delle modifiche
    si può dire allo script nella sua scelta casuale di girare tutte le frasi prima di ripescarne una frase che ha gia mostrato?

    per prima cosa ho cercato di buttare giu un pò di codice

    in head

    Codice PHP:
    web=new Array()
    web[1]="frase 1"
    web[2]="frase 2"
    web[3]="frase 3"
    web[4]="frase 4"
    web[5]="frase 5"
    web[6]="frase 6"
    web[7]="frase 7"
    web[8]="frase 8"
    web[9]="frase 9"
    web[10]="frase 10"
    web[11]="frase 11"
    web[12]="frase 12"
    web[13]="frase 13"
    web[14]="frase 14"
    web[15]="frase 15"
    function gira() 
        { 
        
    x=Math.ceil(15*Math.random())
        
    document.getElementById('link').innerHTML web[x];
        
    timerID=setTimeout("gira()",6000); 
        } 

    nel body
    <body onload="gira()";>

    all'inerno il richiamo dello script in un punto che voglio io

    <td id="link">

    è giusto? sembra funzionare ma mi rivolgo a chi è più esperto di me

    ripeto il mio problema:
    si può dire allo script di generare una frase in modo casuale senza che la ripeta prima di averle girate tutte?se si come si fa?

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    io suggerirei questo percorso:

    - definisci il tuo array di frasi (1,2,3,4..., 15)
    - lo scombini (shuffle) (6,11,4,14,7...)
    - lo leggi nel nuovo ordine in sequenza

    al termine puoi decidere se ripartire nell'ordine scombinato oppure fare un nuovo shuffle
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da fcaldera
    io suggerirei questo percorso:

    - definisci il tuo array di frasi (1,2,3,4..., 15)
    - lo scombini (shuffle) (6,11,4,14,7...)
    - lo leggi nel nuovo ordine in sequenza

    al termine puoi decidere se ripartire nell'ordine scombinato oppure fare un nuovo shuffle

    copia e incolla

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="it" xml:lang="it">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>xhtml 1.0</title>
    
            <script type="text/javascript">
            // <![CDATA[
    
            var randomQuotes = function(id) {
            
                /* Fabrizio Calderan - 2009.06.23. */
    
                var
                _q        = [
                    'frase 1',
                    'frase 2',
                    'frase 3',
                    'frase 4',
                    'frase 5'
                ],
                _current  = 0,
                _last     = _q.length,
                _element  = document.getElementById(id),
    
                _sort    = function() { return Math.round(Math.random()) },
                _shuffle = function() {
                    _q.sort(_sort);
    
                    // Riporta il nuovo ordine shuffle nella console firebug (se presente)
                    if (typeof(console) === 'object') console.log(_q);
                };
    
    
                return {
                    rotate    : function(o) {
                        _shuffle();
    
                        (function() {
                            _element.innerHTML = _q[_current++];
                            if (_current === _last) {
                                _current = 0;
                                if (o.reshuffle) _shuffle();
                            };
                            setTimeout(arguments.callee, o.pause);
                        })();
                    }
                }
            };
    
            onload = function() {
                randomQuotes('citation').rotate({
                    'pause'     : 2000, // millisecondi di attesa tra una citazione e la seguente
                    'reshuffle' : true  // cambia o meno l'ordine ad ogni sequenza completata
                });
            }
    
            // ]]>
            </script>
    
        </head>
    
    <body>
    
        <h1>Citazioni random</h1>
    
        <q style="font-size: 32px"><cite id="citation"></cite></q>
    
    </body>
    </html>

    Edit:
    - la funzione randomQuotes accetta come argomento l'id dell'elemento in cui si devono scrivere le citazioni.
    - il metodo rotate accetta un invece oggetto in cui definire 'pause' e 'reshuffle'. Impostando a true quest'ultima chiave, ad ogni ciclo completato, l'ordine dell'array stesso viene nuovamente cambiato (se hai la firebug installata puoi vederne il comportamento nella console).



    Keywords: ripetere rotazione citazioni aforismi frasi random ordine ordinamento caso casuali casuale senza ripetizioni
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777

    grazie

    grazie è quello che cercavo

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.