この記事では、デフォルトでjQueryに含まれるjQuery.cssHooksオブジェクトについて説明します。 このオブジェクトの拡張により、.css()メソッドで規定されている新しいプロパティまたは値を追加できますが、これらは特定のブラウザでは最初はサポートされていません。 多くの場合、CSSフックはニュースではありませんが、私にとってはちょっとした発見でした。
さらに読むのが面倒な人のために、私は主なアイデアを与えます。 jQueryにchuck-norris CSSプロパティを追加するとします。
$.cssHooks.chuckNorris = { get: function(elem) {
以下は、IEの古いバージョンでrgbaをサポートするbackground-colorプロパティの「変更」と、仕様に存在しない新しいbackground-alphaプロパティを追加して、背景色の透明度を便利に設定する方法を詳細に説明します。 IEでは、フィルタープロパティを使用して色の透明度を実装し、2つの同じ色の
グラデーションを要素に追加します。
この方法には2つの欠点があります。
まず、幅がautoのブロックではグラデーションが機能しないため、ハックを使用する必要があります。
$('div').width('100%');
第二に、フィルターは背景画像に作用します。 古いバージョンのロバで予想される(最初の写真)の代わりに、これ(2番目の写真)を取得します。
最初に、さまざまな形式で色を解析し、オブジェクト{r、g、b、a}を返す関数(parseColor)が必要です。 次のオプションが考慮されます。
- 空の文字列またはトランスパテントが入力に到着したとき
- #Aarrggbb形式文字列(IEのグラデーション用)
- #Rrggbbフォーマット文字列
- #Rgbフォーマット文字列
- フォーマット文字列rgb [a](r、g、b [、a])
このパーサーのコード(サイズにより場所が異なります)、そして実際には
、ここからアイデアは部分的に相互的
です 。
2番目のステップは、htmlノードを受け取り、将来必要となる多くの関数を含むColorクラスを作成することです。
var Color = function(el){
次に、色の値自体の設定に移りましょう。 ネストされているにもかかわらず、読者がコードを理解するのにそれほど苦労しないことを願っています。
this.setBackgroundColor = function(color) { var newColor, newColorObj = parseColor(color); if(ieDetect.isOldIe) {
コードの次の部分では、色の値を取得します。 ここでは簡単です。
this.getBackgroundColor = function() { var color; if(ieDetect.isGradientEnabled) {
ここからが主要部分です。 backgroundColorフックを追加します。
$.cssHooks.backgroundColor = { get: function(elem) { var color = new Color(elem); return color.getBackgroundColor(); }, set: function( elem, value ) { var color = new Color(elem); color.setBackgroundColor(value); } }
backgroundAlphaフックを追加する
$.cssHooks.backgroundAlpha = { get: function(elem) { var color = new Color(elem); var colorStr = color.getBackgroundColor(); var colorObj = parseColor(colorStr); return colorObj.a; }, set: function(elem, value) { var color = new Color(elem); var colorStr = color.getBackgroundColor(); var colorObj = parseColor(colorStr);
すべてが完了し、使用できるようになりました。
p{background-color: #991111; ...} div{background: url(...) ...}
<div> <p>...</p> <p>...</p> </div>
$('p').width('100%'); $('p:eq(0)').css({'background-color':'rgba(0,111,221,0.9)'}); $('p:eq(1)').css('background-alpha', 0.5);
ご覧のとおり、「キャメルケース」スタイルの名前を持つオブジェクトの場合、jQueryは「ハイフン」スタイルのサポートを自動的に追加します。
おわりに
特定のブラウザーでサポートされていない(または部分的にサポートされている)プロパティのサポートを追加する場合は、プラグインを作成してこれを行うことができ、代わりに$ .cssHooksを使用することを忘れてください。
参照:
最終バージョン:
finom.ho.ua/bgalpha記事からの
フックコード:
finom.ho.ua/bgalpha/background-rgba.csshook.jquery.js代替ドキュメントの
cssHooks :
jqapi.com/#p=jQuery.cssHooks