Home > MooTools > [mootools] 透過PNGをIE6で自動的に表示させる pingfix.js clone

[mootools] 透過PNGをIE6で自動的に表示させる pingfix.js clone

必要に迫られて作ったIE Pingfix.jsのクローン
ページ内にある透過PNG形式画像をIEでも表示させるプラグインのmootools版です。
透過画像やAlphaImageLoaderについてはこっちの記事で詳しく書いてます→透過PNGと透過フィルターの使い方

適用する画像の判別はファイル名で行います。
背景は面倒なので未対応ですが、要素IDによる範囲指定が可能です。

やってる事は大体同じ

  1. 透過する画像を取得
  2. 画像の属性を取得(width,height,alt,src,class,id等)
  3. 新しい要素を作成(このクラスではspan)
  4. 作成した要素に画像の属性を当てる
  5. Style属性で作った要素をスタイリング(AlphaImageLoaderはここ)
  6. img要素を削除またはdisplay:noneにして作成した要素を挿入

Usage

このスクリプトはmootools ver1.2のプラグインです。
動作にはmootoolsのコアファイルが必要です。» Download

ヘッダでmootoolsとクラスのjsファイルを読み込んだ後、
domready内でクラスのインスタンスをnewで作ります。

JavaScript:
  1. <script type="text/javascript" src="mootools.js"></script>
  2. <script type="text/javascript" src="moopingfix.js"></script>
  3. <script type="text/javascript">
  4. //<![CDATA[
  5. window.addEvent('domready', function(){
  6.     new mooPingfix();
  7. });
  8. //]]>
  9. </script>

ブラウザのバージョン判断はクラスが勝手にやりますが、上のdomreadyをクラスファイル内に書いて条件分岐させてもおk。

HTML:
  1. <!--[if lt IE 7.]>
  2. <script defer type="text/javascript" src="moopingfix.js"></script>
  3. <![endif]-->

フィルターを適用するpng画像の名前の拡張子前にfixをつけて、「fix.png」としてください。
例:dog-fix.png hoge_fix.png moofix.png
この名前を持つ画像のみfilterを適用します。imgタグのwithとheight属性は必須です。
alt属性は必須ではないですが、なるべくつけてください。

Class

JavaScript:
  1. new mooPingfix([{options}]);

デフォルトはbodyタグ内全てです。

Options

以下はデフォルト値です。

JavaScript:
  1. options: {
  2.     areaID:null
  3. }
  • areaID:"string"
    ここで指定されたIDの範囲内だけチェックします。デフォルトはnull(body)
    ID名だけ記述してください。ドル関数は使えません。

ダウンロードmooPingfix (v1.0)

修正版

v1.2
親がposition:absoluteとかrelativeとかだったりして、リンク貼ってある透過png画像にフィルタ使うとリンクが機能しなくなることがあるんですが、それを解決しようと色々アレコレしてみた。

JavaScript:
  1. var mooPingfix = new Class({
  2.    
  3.     Implements: [Options],
  4.  
  5.     options: {
  6.         areaID:null,
  7.         spacerImg:"images/blank.gif"
  8.     },
  9.     initialize: function(options) {
  10.         if(Browser.Engine.trident && Browser.Engine.version <5){
  11.             this.setOptions(options);
  12.             if(this.options.areaID !== null) this.area = $(this.options.areaID);
  13.             else this.area = $(document.body);
  14.             this.pings = null;
  15.             this.spacer = this.options.spacerImg;
  16.             this.getPings();
  17.             if(this.pings) this.createFix();
  18.         }
  19.     },
  20.     getPings:function(){
  21.         this.pings = this.area.getElements("img").filter(function(el,index){
  22.             if(el.getProperty("src").test("fix.png")){return el;}else{return null;}
  23.         });
  24.     },
  25.     createFix:function(){
  26.         this.pings.each(function(el,index){
  27.             var parent = el.getParents().reverse();
  28.             var pa = parent[parent.length-1];
  29.             var Props = el.getProperties('src','alt','width','height',"Class","id");
  30.             el.setProperty("src",this.spacer);
  31.             el.setStyle("filter","progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+Props.src+"', sizingMethod='scale')");
  32.            
  33.             if(pa.tagName=="A"){
  34.                 for (i = 0; i <parent.length; i++) {
  35.                     if(parent[i].getStyle("position")!="static" && parent[i].tagName!="BODY" && parent[i].tagName!="HTML"){
  36.                         parent=parent[i];
  37.                     }
  38.                 }
  39.                 var copy = el.clone();
  40.                 copy.setStyles({
  41.                     "display":"block",
  42.                     "cursor":"pointer",
  43.                     "width":Props.width+"px",
  44.                     "height":Props.height+"px",
  45.                     "position":"absolute",
  46.                     "z-index":"50",
  47.                     "left":el.getPosition(parent).x,
  48.                     "top":el.getPosition(parent).y
  49.                 });
  50.                 copy.addEvent("click",function(){
  51.                     location.href = pa.href;
  52.                 });
  53.                 copy.inject(parent);
  54.             }
  55.         },this);
  56.     }
  57. });

複製作って上に被せてるだけなんだけど
なんかもうブラウザ変更促す方が手っ取り早い気がする…

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://tenderfeel.xsrv.jp/mootools/482/trackback/
Listed below are links to weblogs that reference
[mootools] 透過PNGをIE6で自動的に表示させる pingfix.js clone from WebTecNote

Home > MooTools > [mootools] 透過PNGをIE6で自動的に表示させる pingfix.js clone

最近の投稿
最近の修正
  • そしてこのSQLはわれながらよく書いたと思う 2010-11-15
  • CSVの列っていう方がいいのかな…118項目だった 2010-11-15
  • 楽天のCSVの項目が116個もあった衝撃 2010-11-15
  • オフィスで香水臭振りまくのは迷惑だと知れ 2010-11-15
  • ぐあー フレグランステロやー 2010-11-15
  • More updates...

Powered by Twitter Tools

Tag Cloud
おすすめサーバー・他
メタ情報

Return to page top