通販で自転車のスポーク買いました。agoです。
社内から「yuga.jsみたいに呼べば使えて、環境に依存しないpngfixとrolloverライブラリがほしい」とリクエストを受けたので作成してみました。
使い方はファイルをダウンロードし、以下のようにマークアップすれば完了です。
<img src="opacity.png" class="btn" />
<!-- mouseover時にopacity_o.pngを表示 -->
<div class="bgpng" style="background-image:url(opacity.png); width:200px; height:200px"></div>
<!-- 背景のpngfix(img,input[type="button"]は自動的にpngfixする) -->
<div class="bgpng btn" style="background-image:url(opacity.png); width:200px; height:200px"></div>
<!-- 背景のpngfix+mouseover時にopacity_o.pngを表示 -->
<a href="/" class="external">target="_blank"</a>
<!-- linkへtarget="_blank"を設定する -->
<p class="wordBreak" style="width: 50px;border: 1px solid #000;">aaa<em>bbb<span>ccc</span>ddd</em>eee</p>
<!-- 強制改行 -->
また、以下の形式で設定を変更することができます。
読み込み時に指定
<script type="text/javascript"http://svn.coderepos.org/share/lang/javascript/sisso/sisso.js#setting1=value1&setting2=value2"></script>
読み込み時前に指定
<script type="text/javascript">
if (!Sisso) var Sisso = {};
Sisso.setting1 = 'value1';
Sisso.setting2 = 'value2';
</script>
<script type="text/javascript"http://svn.coderepos.org/share/lang/javascript/sisso/sisso.js"></script>
同時に指定に指定した場合、読み込み時前に指定したものが優先されます。
(この場合、setting1=value1、setting2=value2となります)
<script type="text/javascript">
window.Sisso.setting1 = 'value1';
window.Sisso.setting2 = 'value2';
</script>
<script type="text/javascript"http://svn.coderepos.org/share/lang/javascript/sisso/sisso.js#setting1=value3&setting2=value4"></script>
指定できる値は以下の通りです。
blankUrl
1x1の透過gif URL
初期値
http://tech.kayac.com/data/iepngfix-library-sisso-js/blank.gif
overClass
rollover対象のクラス
初期値
btn
externalClass
外部windowで開くリンクの対象クラス
初期値
external
wordBreakClass
wordBreak対象のクラス
初期値
wordBreak
pngFixSelector
pngFix対象selector(IE6が認識できるもののみ)
初期値
img, input, .bgpng
pngFixVersion
pngFixを行うIEのバージョン(IE7もリンクがクリックできなくなる問題があるのでpngFixを行うことを推奨)
初期値
6,7
noRoll
自動的にrolloverを行わない場合true
初期値
false
noPngFix
自動的にpngFixを行わない場合true
初期値
false
noExternal
自動的にexternalを行わない場合true
初期値
false
noBreakAll
自動的にwordBreakを行わない場合true
初期値
false
noGMap2Error
google maps apiと同時に読み込んだ場合、エラーを出さない場合true
(仕様上google maps apiと同時に読み込むと非常に重くなるので、この値をtrueにする場合pngFixSelectorでgoogle maps領域を除外することを推奨)
初期値
false
制限事項
bgpngの指定に関しては以下のような制限があります。
- background-repeat
- どの値を指定しても「no-repeat」と同じ表示になります。
- background-position
- どの値を指定しても「top left」と同じ表示になります。
また、以下のような機能も備えています。
1 jQuery連携
先にjQueryが読み込まれている場合、mouseover、mouseoutのイベント設定をjQuery経由で行います。
(読み込まれていない場合、内部のfunctionを使用します)
これにより、外部からrolloverをとめたい場合でも、jQuery経由でunbind行うことが可能です。
また、イベントのネームスペースに「Sisso」を設定しているため、$(‘.btn’).unbind(‘.Sisso’);ですべてのイベントを停止することが可能です。
2 pngfixにbehaviorを使用
JSでpngfixする場合、window.loadでは($(function () {})でも)一瞬灰色の不透明色が見えてしまっていました。
この点に関しては.htcを使用すれば回避できるのですが、.htcはJSと別に記述する必要がありJS単体では動作しなくなります。
(ただ、このsisso.jsも空白のgifが必要なため、JS単体で動作しているわけではないですが。。。)
これに関して、sisso.jsでは動的にstyle tagを生成しhead内に追加することで、.htcを使用せずに同じ動作を実装しています。
また、behaviorを使用することにより動的に追加された要素に対しても自動的にpngfixがかかるため、JSから追加するたびに何らかのコードを呼ぶ必要がありません。
(その代わり、elem.srcからファイル名を取得することができないため、Sisso.store(elem)を使用する必要があります)
3 速度
要素を抽出する際、可能であればgetElementsByClassName、querySelectorAll、evaluateを使用するため、最新のブラウザでは高速に動作します。
4 mixiアプリ対応
opensocialのキャッシュ形式にも対応しているため、mixiアプリ、gooホームガジェット内でも使用することが可能です。
Plugin自体はMIT、GPLのDual license、公開場所はCodeReposを使用させていただいているので、興味のある方はご自由に組み込み、修正を行ってください。
例によって以下のリンクからお試しいただくことが可能です。
ちなみに、ライブラリの機能が質素なのであって、Web制作が質素になるという意味ではないのでご注意ください。
カヤックでは古いブラウザ向けのBKに詳しい方や、新しいブラウザ向けの機能に詳しい技術者を募集しています!
関連記事
jQuery.opensocial_simple Pluginを作成しました。
jQuery.ime_external Pluginを作成しました。
jQuery.autouploader Pluginを作成しました。
以下のライブラリを参考にさせていただきました。
(pngfixのかなりの部分を参考にさせていただきました)
($.data、domManipの機能を一部取り入れています)
(名前とコンセプトを参考にさせていただきました)
(2008/½ 社内から「まともに動かない」と指摘されて直しました。また、onPropertyChangeを使用するように実装を変更しました)
(2008/2/5 link external、wordBreakを実装しました)
(2008/2/19 制限事項を追記しました)
(2009/5/1 設定方法を追記しました)
(2009/5/7 設定方法のエラーを修正しました)
(2010/3/10 IE6で背景hoverが実行されない問題を修正しました。この問題は社外の方からのご指摘で発見いたしました。ありがとうございます)