これが私の試みです:
(function ($) {
$.fn.contrastingText = function () {
var el = this,
transparent;
transparent = function (c) {
var m = c.match(/[0-9]+/g);
if (m !== null) {
return !!m[3];
}
else return false;
};
while (transparent(el.css('background-color'))) {
el = el.parent();
}
var parts = el.css('background-color').match(/[0-9]+/g);
this.lightBackground = !!Math.round(
(
parseInt(parts[0], 10) + // red
parseInt(parts[1], 10) + // green
parseInt(parts[2], 10) // blue
) / 765 // 255 * 3, so that we avg, then normalize to 1
);
if (this.lightBackground) {
this.css('color', 'black');
} else {
this.css('color', 'white');
}
return this;
};
}(jQuery));
それを使用するには:
var t = $('#my-el');
t.contrastingText();
これはすぐにテキストを黒または白にします。アイコンを実行するには:
if (t.lightBackground) {
iconSuffix = 'black';
} else {
iconSuffix = 'white';
}
次に、各アイコンはのようになり'save' + iconSuffix + '.jpg'
ます。
これは、コンテナが親をオーバーフローする場所では機能しないことに注意してください(たとえば、CSSの高さが0で、オーバーフローが非表示になっていない場合)。これを機能させるには、かなり複雑になります。