2013-02-22 15 views
5

Próbuję utworzyć funkcję, która sprawdza bg elementu i zmienia jego bg na podany kanał alfa. Funkcja ma tę postać:Funkcja jQuery do dodawania alfa do elementu bg

$.fn.bgalpha = function(alpha) { 
    var bg = $(this).css('background-color'); 
    //... 
} 

Ale: chrom zwraca bg jako RGB gdy normalny kolor jest ustawiony i jak RGBA z zera, gdy nie ma bg, czyli 8 zawsze zwraca HEX, IE9 powraca „przezroczysty”, gdy nie ma to bg i rgb, gdy jest bg itp. Tak wiele różnych przypadków.

Co chcę zrobić, to> uzyskać r, g, b z koloru bg obiektu, dodać do niego kanał "a" i ustawić element bg jako rgba ze wszystkimi wartościami. Ale od prostego do zrobienia jest to trudne i skomplikowane, gdy mówimy o przeglądaniu krzyżowym.

Masz pojęcie, jak używać tych kolorów w sposób "uniwersalny"? W różnych przypadkach otrzymuję wartości „none”, „przezroczysty”, „rgba”, „RGB” lub „hex” jako wartości początkowej bg

+0

Prawdopodobnie jest to dużo prostsze niż się wydaje. Jeśli przeglądarka zwraca hex jako kolor, prawdopodobnie nie obsługuje rgb, a nie wszystkie przeglądarki. Nie wszystkie przeglądarki obsługują także rgba i nie możesz ustawić kanału Alpha, jeśli przeglądarka nie obsługuje rgba, więc musisz zacząć od sprawdzenia, czy przeglądarka obsługuje rgba, jeśli tak, po prostu ustaw kolor za pomocą rgba! – adeneo

+0

Co powiecie na obejście: użyj dwóch elementów, ułożonych jeden na drugim, jednego z tłem i jednego z zawartością. Następnie zmień krycie tła. – Blazemonger

Odpowiedz

2

Dołącz jQuery Color plugin (nie jest to oficjalnie usankcjonowane) i używać jej metody .alpha().

Poniższy fragment kodu spowoduje zmianę koloru tła this więc jest to 50% przezroczyste:

var clr2 = $.Color(this,'background-color').alpha(0.5); 
$(this).css('background-color', clr2.toRgbaString()); 

lub jako jedną linię:

$(this).css('background-color', $.Color(this,'background-color').alpha(0.5).toRgbaString()); 

http://jsfiddle.net/mblase75/aea3h/

+0

to całkiem sporo kodu ... – OPOPO

+0

Niezupełnie. Zależy od tego, co chcesz osiągnąć. Zmniejszyłem to. – Blazemonger

+0

dostałem czerwony-bg #lol div, zrób $ ("# lol"). Bgalpha (0.5); i ma bg w 50% przezroczysty, to wszystko. – OPOPO

0
$.fn.bgalpha = function(alpha) 
{ 
    return $(this).each(function(){ 
     $(this).css('background-color', $.Color(this,'background-color').alpha(alpha).toRgbaString());   
    }); 
} 

Korzystanie Blazemonger's rozwiązanie - to jest ostateczny kod.

Zastosowanie:

$('.something').bgalpha(0.8); 

i wymaga jquery.color.js (7KB po minifing)

Powiązane problemy