2012-12-05 10 views
11

Sto provando a cambiare l'opacità dello sfondo di un div usando un cursore ui jquery.Cambiare l'opacità dello sfondo di div usando RGBa

L'utente può modificare il colore di sfondo del div, quindi ho bisogno di sapere come posso solo modificare il parametro alfa dello sfondo senza cambiare il colore.

Questo è il mio codice finora:

$('#opacity-slider').slider({ min: 0, max: 1, step: 0.1, value: 1 }) 
       .bind("slidechange", function() { 
        //get the value of the slider with this call 
        var o = $(this).slider('value'); 

        var e = $('.element-active'); 
      var currentColor = $('.element-active').css('background-color');   
        $(e).css('background-color', 'rgba(255, 255, 255, '+o+')') 
       }); 

ho bisogno di un po 'come cambiare solo la parte alpha della variabile currentColor. Spero che qualcuno possa aiutarmi! TIA

+0

Leggi questo articolo http://deepubalan.com/blog/2010/03/29/rgba-vs-opacity-the-difference-explained/ –

+0

Comprendo la differenza tra opacità e rgba. Voglio usare rgba in modo da non influenzare l'opacità del contenuto del div –

risposta

1

sono riuscito a risolvere questo imparando da e adattando la risposta suggerita da @Tom Smilack, usando la manipolazione delle stringhe.

ho fatto un piccolo cambiamento in modo che la sua risposta sarebbe anche lavorare per div che non dispongono di set di alpha in origine, ecco il codice finale che sto usando:

$('#opacity-slider').slider({ min: 0, max: 1, step: 0.1, value: 1 }) 
      .bind("slidechange", function() { 
       //get the value of the slider with this call 
       var o = $(this).slider('value'); 

       var e = $('.element-active'); 
       var currentColor = $('.element-active').css('background-color'); 
       var lastComma = currentColor.lastIndexOf(')'); 
       var newColor = currentColor.slice(0, lastComma - 1) + ", "+ o + ")"; 
       $(e).css('background-color', newColor); 

      }); 

Grazie a tutti per i suggerimenti e Spero che questo aiuti le persone che vogliono la stessa funzionalità

12

Prova questo:

var alpha = $(this).slider('value'); 
var e = $('.element-active'); 
$(e).css('background-color', 'rgba(255,255,255,' + alpha + ')');​ 

Updated Example Here

+0

Ehi, mi dispiace di non averlo spiegato correttamente. Il codice che ho funziona, ma imposta il colore di sfondo o bianco perché è ciò che è impostato nel codice (255,255,255). Voglio sostituirlo con il colore impostato dall'utente per il div.Spero che questo sia più chiaro. –

+0

'elemento-attivo' è il div giusto? –

+0

sì, questo è l'elemento che ho bisogno di scoprire quale sia il colore di sfondo corrente, quindi usare il cursore per cambiare l'opacità usando RGBa –

3

manipolazione stringa potrebbe essere il modo migliore per andare:

var e = $('.element-active'); 
var currentColor = $('.element-active').css('background-color'); 
var lastComma = currentColor.lastIndexOf(','); 
var newColor = currentColor.slice(0, lastComma + 1) + o + ")"; 
$(e).css('background-color', newColor); 
1

Anche se questo è già risolto, forse la mia piccola funzione aiuterà qualcuno. Come argomento ci vuole un elemento jQuery come $ ('a') (che ha un collegamento RGB o RGBA background-color) e un valore alpha da 0 - 1.

function RGBA(e, alpha) { //e = jQuery element, alpha = background-opacity 
    b = e.css('backgroundColor'); 
    e.css('backgroundColor', 'rgba' + b.slice(b.indexOf('('), ((b.match(/,/g).length == 2) ? -1 : b.lastIndexOf(',') - b.length)) + ', '+alpha+')'); 
} 

si può usare in questo modo :

RGBA(jQuery('a'), 0.2); 

la parte importante è che l'elemento <a> ha un RGB o RGBA background-color set già.

<a href="#" style="background-color: rgb(100,10,50);">Sample</a> 
-1

perché semplicemente non alternare una classe con quel colore e opacitty

$(myelement).toggleclass(); 

se the jquery api

+0

Vuole "scorrere" (non commutare) opacità !!! – Ruwen

0

Solo per me la soluzione più comprensibile è la divisione di colore RGBA da una virgola e cambiando ultimo elemento con nuovo valore di opacità (ovviamente lo funziona solo se il colore iniziale era rgba):

var newAlpha = $(this).slider('value'); 
// initial background-color looks like 'rgba(255, 123, 0, 0.5)' 
var initialBackgroundColor = $('.element-active').css('background-color'); 
var bgColorSeparated = initialBackgroundColor.split(','); 
// last element contains opacity and closing bracket 
// so I have to replace it with new opacity value: 
bgColorSeparated[3] = newAlpha + ')'; 
var newColor = bgColorSeparated.join(','); 
$('.element-active').css('background-color', newColor); 
Problemi correlati