2012-03-07 11 views
6

Non ho mai visto un effetto hover come questo prima, e sto cercando di capire come è stato realizzato. Noterai in this example, che quando un utente passa su un link, il colore che il link gira può essere uno qualsiasi dei 5 colori assegnati nel foglio di stile (vedi sotto) a caso. Come si crea questo effetto hover? Può essere fatto puramente con i CSS?Come assegnare un colore in modo randomizzato all'effetto hover

a:hover { 
    color:#1ace84; 
    text-decoration: none; 
    padding-bottom: 2px; 
    border: 0; 
    background-image: none; 
    } 

a.green:hover { color: #1ace84; } 
a.purple:hover { color: #a262c0; } 
a.teal:hover { color: #4ac0aa; } 
a.violet:hover { color: #8c78ba; } 
a.pink:hover { color: #d529cd; } 

risposta

4

Il pezzo chiave del codice jQuery viene caricato nel piè di pagina.

Si prega di prestare attenzione al commento degli autori sulla sceneggiatura o di cercare lo author's permission di riutilizzarlo.

/* 

    Code below this point is not licensed for reuse, 
    please look and learn but don't steal 

*/ 
var lastUsed; 
function randomFrom(arr){ 
    var randomIndex = Math.floor(Math.random() * arr.length); 
    lastUsed = arr[randomIndex]; 
    return lastUsed; 
} 
color_classes = ['green','purple','violet','teal','pink']; 
function initLinks() { 
    $('#wrap a').hover(function() { 
    new_classes = color_classes.slice(); 

    var index = $.inArray(lastUsed, new_classes); 
    new_classes.splice(index, 1); 

    var classes = $(this).attr('class'); 
    if (classes) { 
     classes.split(' '); 
     $(classes).each(function(i, className) { 
      var index = $.inArray(className, new_classes); 
      if (index>0) { 
       new_classes.splice(index, 1); 
      } 

     }); 
    } 
    $(this).removeClass(color_classes.join(' ')).addClass(randomFrom(new_classes)); 
    }, function() { 
    }); 
} 
+0

Considerando i codificatori commenti non credo si dovrebbe avere postato il loro codice. Anche se il CSS e il jQuery sono client e disponibili per tutti, è ancora il loro codice e hanno speso tempo a scriverlo per questo sito di ragazzi. È stato onesto nel commentare il codice in cui ha apportato modifiche e commentato il proprio codice. Ho pubblicato esempi di seguito che fanno lo stesso e non sono stati rubati. – Anagio

+2

@Anagio Il codice è sul web aperto e l'autore ti invita a imparare ma non a rubare. Quindi non penso davvero che ci sia un problema nel postarlo. Non è poi così unico come la tua risposta specifica. – toomanyairmiles

+0

il mio punto è stato il programmatore ha preso il tempo di commentare il codice che ha cambiato che non era il suo e ha chiesto a nessuno di rubare il suo codice personalizzato. Sì, è sul web aperto ma anche le foto a cui i fotografi hanno diritti d'autore, solo perché possiamo scaricarle non significa che dovremmo prenderle. Ci sono app open source per le quali hai bisogno di licenze e se le trovi usate senza una licenza puoi comunque archiviare i DMCA contro i siti anche se il codice è open source al 100%. Se la domanda fosse stata posta su StackOverflow sono sicuro che alcune persone avrebbero risposto con un codice di esempio in jsfiddle – Anagio

9

Poiché viene introdotto un fattore casuale, non penso che ci sia un modo per farlo esclusivamente con i CSS.

Ecco il mio semplice approccio al problema, utilizzando jQuery.

si può vedere un esempio di lavoro qui: http://jsfiddle.net/GNgjZ/1/

$(document).ready(function() 
{ 
    $("a").hover(function(e) 
    { 
     var randomClass = getRandomClass(); 
     $(e.target).attr("class", randomClass); 
    }); 
}); 

function getRandomClass() 
{ 
    //Store available css classes 
    var classes = new Array("green", "purple", "teal", "violet", "pink"); 

    //Get a random number from 0 to 4 
    var randomNumber = Math.floor(Math.random()*5); 

    return classes[randomNumber]; 
} 
+0

Ho bisogno di cambiare l'hover bg di un div con la classe "article-container". Cambiare "a" in "articolo-contenitore" non sembra funzionare. Sto facendo qualcosa di sbagliato? – Arete

+0

@Arete, dal momento che si sta lavorando con una classe è necessario utilizzare il selettore '.article-container' (notare il punto). Nota anche che questo esempio cambia completamente l'attributo 'class', nel tuo caso usando' addClass() 'e' removeClass() 'potrebbe essere migliore. –

Problemi correlati