POPS-iBOX B2-B. PAGERタイプ (pops-ibox-b2-b.js) カスタムアニメopacity処理 サンプル
■ このスクリプトは pops-ibox-b2 を改造し、カスタムアニメopacity処理に変更したものである。( pops-ibox-b2-b )、opacity処理の性質上、動作は重くなります。
■ カスタムアニメopacity処理は環境の悪い場合に、重いのでそれなりの工夫をしています。後述の「スクリプトの改造などの資料」を参考にされたし。
★環境の悪い場合とは6-8年前あるいは以上のマシン環境であり、ある程度は快適に見られる場合を「良し、普通」、この環境で動作が重い場合を「重い、遅い」と表現しています。今時の高級マシンを基準にはしていません。
★サンプルデモなどはなるべく、HTML、CSSの多い実際的なところで行っています。閲覧するマシン性能などそれらを考慮して判断ください。
POPS-iBOX B2-B opacity処理タイプ DOWNLOAD
[ pops-ibox-b2-b.zip ] ( 資料を含むサンプル一式 )
JS (pops-ibox-b2-b.js) 21KB / ZIP 832KB![]()
■ POPS-iBOX B2-B 画像横幅を広げたタイプ
★jQuery-1.3.2以上が必要です。jquery.comより最新のものを DOWNLOAD ください。
このサンプル zip には サンプル動作のため、jquery-1.4.2.min.js が内包されています。
注意、POPS-iBOX B2-B (pops-ibox-b2-b.js) は、「グループ」の設定はしておりません。
・動作を軽くするため、下部画像、陰影部分(allmask層)だけをopacity処理しています。伴いスクリプト処理が増えています。
・標準では、opacity処理(カスタムアニメopacity処理、fadeIn、fadeOut、fadeTo)などを行える構造に統一されています。
・IE8での階層認識が甘いので、z-indexを新たに割り振ったCSS構造になっています。
・IEの特殊な事情に合わせるため、色々な処理、工夫をしていますので、煩雑です。前もってご理解ください。
・このカスタムアニメopacity処理は、特殊なものですので、スクリプト処理がふえています。好みも分かれるものです。
POPS-iBOX B2-B PAGER Opacity処理伸縮タイプ、サンプル DEMO
★ サムネール画像を CLICK して下さい、POPUP拡大します。画像その他を、押すことにより消去します。
約25%の大きさのサムネールJPG画像を使用、奇数値にならないように作成しています。
![]() 画像1 |
![]() 画像2 |
![]() 画像3 |
![]() 画像4 |
![]() 画像5 |
サムネールなしリンク 画像1 100x80
※ パネル拡大表示中でも、他のサムネールをクリック可能です。
※ 完全に表示してから、または、完全に消えてから、次の画像を選定してください。
※ 「離れた場所に画像をおく」。このページ中間にサムネールがあります。離れた位置にあってもPAGERに設定表示されます。
PAGER
PAGERの番号 HOVER でサムネール画像を表示しますので、見たい画像だけ拡大することができます。
[ PAGER動作図 ]
- ページ内、クラス設定されているもの全てが対象です。
- サムネールのあるものは、PAGERの側に表示します。
- 現在表示中のPAGER番号の色を変えます。現在位置がわかります。
- PAGER選定画像の大きさに変化してクロスフェードします。画像の大きさでの変化が面白い。
- 終了動作で現在表示中のサムネールに帰ります。
注意、PAGERの範囲外のクリックで「終了処理」に行かないように、上部テキストエリアにダミーの click action (何もしない) が設定されています
スクリプトの特徴
- 画像拡大専用です。
- 透過PNG画像を外周に配置したBOXがスムーツに伸縮します。
- カスタムアニメopacity処理をしています。
- 環境の良くない場所、スペックの良くないマシンでもスムーツに伸縮します。
- 透過PNG画像を外周に配置したため擬似立体的です。
- 今までない BOX 構造です。
- サムネールが拡大して、LOADされた本画像とクロスフェードします。
- サムネールが無くともOKです。(PAGER 付のため、サムネールがあるほうが便利)
- 反面、解決出来ない IE のバグ(仕様)をも含みます。ほとんど気にならない範囲と思います。
- PAGER 付属。画像選定が楽である。
対応ブラウザ(検証済みブラウザ)
・対応ブラウザ、IE6+ Safari(4.0.4) Firefox(3.5.5) Chrome(5.0.375.99) Opera(10.53)
DOWNLOAD ZIP に含まれる内容
- jquery-1.4.2.min.js が内包されています。
- 該当の、pops-ibox などの JS CSS 一式。
- 該当の、サンプル画像 透過陰影画像など、一式。
- サンプルDEMO html。
- JSに説明のはいったテキスト。参考にしてください。
【重要】、jQuery以外、全てJISのテキストですので、使用環境に応じて適切に書き換えてください。
設置方法
- jQuery1.3.2以上が必要です。
- 専用 js css の読み込み。
- 画像サムネール aリンク要素に、クラスを設定 class="pops_ibox" を記入する。
- 必要であれば、IE8用修正画像の読み込み。
- jsの変更(centerImage画像のパス)。
- js css 共、他のjQueryのプラグインの設定と同様です。
以下、詳細を記します。
POPS-iBOX b2 と構造など同じです、アニメのエフェクトの種類が違うので、スクリプトが若干違うだけで、設定は同じです。
[ 1 ] CSS 読み込み設定
★次のようににHTML head に記入して読み出す。(jsを下方hooterに設定でも可)
通常は、IE8のバグ(陰影が重なる)を修正するため、IE8用スタイル読み込み(修正画像)を行います。
jQuery動作には、先にCSSを読み込むことが前提となっています。
pops-ibox-b2-b.css pops-ibox-b2-b_ie8.css
<link rel="stylesheet" href="css/pops-ibox-b2-b.css" type="text/css" media="all" />
<!--[if IE 8]>
<link rel="stylesheet" href="css/pops-ibox-b2-b_ie8.css" type="text/css" media="all" />
<![endif]-->
IE8、CSSを読み込以外の修正方法もありますが、原則CSS (pops-ibox-b2-b_ie8.css) を読み込ませての画像修正を行ってください。
注意、標準で「IE8専用の修正画像」を使用する設定になっています。動作モードなどに関係なく修正できます。
注意、pops-ibox-b2.cssと違いz-indexが設定されています。必ずpops-ibox-b2-b.cssを使用ください。
★CSSで、IE (IE6.7.8)では透過PNG画像を使用してフィルター処理しています。画像パスを確認ください。
フィルター部分の画像パスを確認、必要であれば変更する。
background: transparent url("../images/r_tl_w6.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_tl_w6.png',sizingMethod='scale');
・background: transparent urlはCSSからみたパスを設定
・AlphaImageLoader(srcはHTMLから見たパスを設定
わからない場合は、どちらとも http:// で始まる絶対urlで記入ください。
背景の削除はJS側で行っています。
★CSSで、使用するボタン画像なども所定の画像フォルダに収容して、正確なパスを設定ください。
★お断り、opacity処理をしない POPS-iBOX A2などでは、IE8でフイルターをせず、修正画像をも使わずに済むはずですが、色々簡素化するために統一して全て同じにしています。よって、個人的にアニメ修正(fadeInほか)などそのままで可能になります。
★このPOPS-iBOX B2-Bはopacity処理をしているため、IE8でフイルターをして、CSS「修正画像」による修正が必要になります。(動作モード限定ですが 99.99%法による修正方法もあります、下説明[ 9 ]参照)
★個人的に、特性バグなど理解して、より効率の良い手法にするなどの改造は自由です。
[ 2 ] JS 読み込み設定
★jQuery-1.3.2以上が必要です。
jQueryプラグイン動作には、先にjQueryを読み込むことが前提となっています。
pops-ibox-b2-b.js
<script type="text/javascript" src="js/jquery-1.4.2.min.js" /></script>
<script type="text/javascript" src="js/pops-ibox-b2-b.js" /></script>
[ 3 ] JS pops_ibox()の実行
★読み込む JS ( pops-ibox-b2-b ) の最後に、pops_ibox()の実行が付随しています。通常は読み込み後、自動的に実行されます。
事情があれば、分離しても結構です。HTML head 部、または、hooter 部以降で実行させます。
★分離して実行。
<script type="text/javascript">
$(function(){
$(document).pops_ibox();
});
</script>
★分離しないで、hooter 部以降で、
<script type="text/javascript" src="js/pops-ibox-b2-b.js" /></script>
としても、同じことです。
★PAGER 付属の場合サムネールの大きさを取得しますが、IE以外では、大きさが旨く取得できない場合があります。
このような状況の場合は、hooter 部以降で、pops_ibox()を実行すると大きさが旨く取得できます。
またはhooter 部以降で、JS(pops-ibox-b2-b.js)を読み込む、これでも同じことです。
・PAGERタイプは、原則、IMG要素にサムネール画像の大きさ width="xxx" height="xxx" を設定記入して使用してください。
資料、[ JS読み出し位置の変更 ]
■JS読み出し位置の変更
このタイプでは、サムネールの画像をページャーに表示しています。原則、JSを下で読み込んでください。
・ページャー使用のものは、最初にJSを読みこんだ際に、サムネールの全画像を調べて、一括ページャー画像登録の処理を行っています。
・IE以外のブラウザでは、JS ( pops-ibox-b2-b.js ) の読み込む位置を通常のようにページHTML上部で行うと、サムネール画像、高さ幅が読み出せない場合があります。
JS ( pops-ibox-b2-b.js ) の読み込む位置を、図のようにページHTMLの最後の方にしてください。
但し、サムネール画像の寸法が表記されている場合は、通常のようにページHTML上部で行うことが出来ます。
サムネール画像、高さ幅が、記載漏れになっていたりもしますから、下で読み込んだほうが無難です。
[ 4 ] 対象画像 a リンク にクラス設定
★必要な画像 a リンク にpops_iboxクラスを与えます。標準ではサムネールのある a 要素。サムネールが無くとも動作します。
一般的なLightBox系の設定方法とほぼ同じです。タイトル、詳細説明など記入できます。
ページ内のpops_iboxクラス設定のものを全て、PAGER、できるようにします。
---------------------------------------------------------------
★HTML側の修正表記
標準ではサムネールのある a要素、サムネールがなくとも可。
・pops_iboxクラスを与える。
・titleプロパティにタイトルを記入。
・captionプロパティに記事を記入。(パネルの大きさを考慮した長さであること)
title.captionが無い場合、文字がない場合は表示されません
★記入例
<a href="photo1/toyota_f1_p011.jpg" class="pops_ibox" title="title1" caption="MEMO/画像1"> </a>
★原則、サムネール画像の大きさを記入。記入なき場合も作動はしますが。サムネール画像を作らず、
直接、画像を縮小して表示使用する場合は、必ず大きさを設定ください。
<img src="photo1/toyota_f1_p011s.jpg" width="200" height="100" />
★サムネール画像が無くとも有効です。サムネール画像が無いリンクには、標準で100x80の大きさが
設定されます。変更可能です。
・PAGERタイプは、原則、IMG要素にサムネール画像の大きさ width="xxx" height="xxx" を設定記入して使用してください。
・サムネール画像の大きさ(width height)は、出来うる限り「偶数」の値にしてください。
・POPS-iBOX B2 (pops-ibox-b2-b.js) は rel="GROUP1"の判定は行っていません。クラス(pops_ibox)を与えた画像全てにアクションを設定します。
・注意、これは、「画像表示専用」ですので画像以外のものにクラスを与えても無意味です。永遠にLOADINGが表示されるだけです。クリックすれば消えます。(拡張子の判定はしていません)
[ 5 ] JSの設定変更
★多少の変更を、JS側で行うことができます、表にまとめておきます。
重要なパネル伸縮時に使用する画像パスの変更。
---------------------------------------------------------------
★JS側の変更注意
centerImage画像が必要ですので、パスを間違いなく設定してください。
JS 1行目前後に下のようなスクリプトがあります。画像パスを貴方のサイトの画像パスに変更してください。
勿論、貴方のサイトの画像保存フォルダに、center_xxxx.png 画像がなければなりません。3種類あります。
//★PANEL内部伸縮画像URL center_black.png center_white.png center_alpha.png
var centerImage = "images/center_white.png";
基本的にサムネールのない場合に読み込まれます、パネルの拡大に使用されます。
10x10-20x20のpngまたはgif画像です、枠の色とあわせます、白黒以外はcenter_alpha.pngを使用します。
自作の陰影を使用する場合は、枠の色と同じに自作しても結構です。
---------------------------------------------------------------
【重要】このサンプルである、カスタムアニメopacity処理タイプの設置の注意
※ opacity処理しながら画像を伸縮する、「一番処理の重いタイプ」ですので、HTML、CSSの少ない環境での使用が望ましい。
※ 表示完了、または消去完了、してから次のサムネールを押さないと、途中処理が残る場合あり、あまりせわしく操作しないこと。
※ このサンプルは最悪の条件下でDEMOを行っていますので、表示の速さ、重さなどを判断ください。
※ 軽くなるように陰影部分だけ処理しています。スペックの良くない私のマシンでも大丈夫なので、ほとんど大丈夫とはおもいます。
※ ブラウザにより消え方に特徴、違いがありますが、おおむね良好に処理されています。
[ 6 ] 陰影の重なりなどの状況図

陰影の重なりなどの状況
動作モード状況などにより、同じ場所に、IEで陰影の重なりが発生します。極力出ないように処理していますが。
| 項目 | IE6 | IE7 | IE8 | 備考 |
| 画像修正で直す | - | - | (修正される結果、無) | CSS読み込み |
| 奇数で重なり | 有 | (有) | - | IE7は条件により |
| XHTML1.0 | 有 | 無 | - | IE6は全てで出る |
| HTML4.01 strict | 有 | 無 | - | 標準モード |
| HTML4.01 strict以外 | 有 | 有 | - | 互換モード |
| ----- | - | - | - | ----- |
IE6.7で状況により、陰影の重なり(奇数の場合重なる)が出る場合がありますが、適切に修正などほどこしていますのでほとんど見えません。この点ご了承ください。
静止中は出ないように修正されていますので、見えるのはアニメの1瞬間といえます。陰影が狭くうすい場合はわかりません。
1. IE8修正画像をCSSで読み込み補正しますので、モードに関係なく、陰影の重なりはでません。
2.縦横の全体の長さが奇数の場合に陰影の重なりが出る。静止時は出ないようにスクリプトで修正しています。
3.XHTML1.0モードに関係なく、アニメ中、IE6の場合陰影の重なりが出る。
4.HTML4.01モードに関係なく、アニメ中、IE6の場合陰影の重なりが出る。IE7は互換モードの場合陰影の重なりが出る
IE6の場合は防ぐ方法は無い。
推奨する、DOCTYPE、の例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ja">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
但し、アニメ中は見えません。スペックの悪いマシンでアニメ終了直前に出る場合がありますが、ほとんど見えません。
[ 7 ] その他の設定変更
JSの変更できる変数の詳細
| 項目 | 変数 | 初期値 | 変更 | 備考 |
| 1.外枠の要素幅 | shadow_W | 20 | 10 (変更しないでください) | 左右陰影の幅 10以上 |
| 2.外枠の要素高さ | shadow_H | 20 | 20 (変更しないでください) | 通常変更しない 10-20 |
| 3.上部テキストエリア | topbox_H | 20 | 20 (偶数値) | 上部テキスト高さ 10以上 |
| 4.下部テキストエリア | bottombox_H | 20 | 20 (偶数値) | 下部テキスト高さ 10以上 |
| 5.サムネール幅 | start_W | 100 | 100 (偶数値) | サムネールなし初期の大きさ |
| 6.サムネール高さ | start_H | 80 | 80 (偶数値) | 同上 |
| 7.pagerの位置 | pager_H_v | 18 | 18 | 状況に応じ変更する |
★通常、上下部テキストエリアの高さの変更だけです。
1.2 shadow_W shadow_H を変更した場合はCSSをも適切に設定しなければなりません。そのまま使用ください。
3.4 上下テキストエリアの高さが 10px 以内の場合はテキストを表示しない設計になっています。
【重要】、3.4 上下テキストエリアの高さを変更した場合は、合計値を必ず「偶数値」にしてください。またはどちらも「偶数値」で設定する。
pops-ibox-b2 (b2-b) 独自の設定
pagerの位置の指定、高さ変更 pager_H_v = 18;
★スクリプトを改造する場合は、自己責任で行ってください。
[ 8 ] HTML4.01の場合、または互換モードの場合
・CSSの変更は必要ありません。
・IE8の場合、CSSを読み込ませての画像修正を行ってください。
・あまり多くの環境下でのテストは行っていませんが、問題ないとおもいます。
・HTML4.01、の設定は互換モードが多いようです。
[ 9 ] JSで99.99%を設定してIE8のバグを修正する方法
★IE8用スタイル読み込み(IE8修正画像)を行わず、JSで99.99%を設定してIE8のバグを修正する方法です。
但し、XHTML1.0、標準モードの場合のみ有効です。標準(通常)では無効になっていますので、下のように有効にします。
(HTML 4.01標準モード でも可能ですが、互換モードで作動しているのが多い)
修正画像を使う場合は下のスクリプトを無効にすればよい。
IE8用スタイル読み込みは必要ない
if (browser_v == 8) {
//★IE8影の重なりを除去する、必要ない場合は削除
$('#allmask').css({'width':'99.99%','height':'99.99%'});
}
こりゃ不思議、IE8 陰影の重なりのバグが無くなる。説明できない現象だ。
DOCTYPE XHTML1.0、標準モードの場合のみ有効です、pops-ibox-b2_ie8.css の読み込みが不要です。
注意、DOCTYPE HTML4.01、または互換モードの場合は、pops-ibox-b2-b_ie8.css を読み込み、
IE8修正画像を使用してください。99.99%を無効にする。
標準では、IE8用スタイル読み込み(IE8修正画像)のため、無効になっている。
IE8用スタイル読み込みが困難な状況の場合です、適応できるモードが限定されますので、有効な手段ではありません。
面倒でも、IE8用スタイルを読み込み、IE8修正画像でバグを取る。こんな方法もあることを認識していただければよい。
[ 離れた場所に画像をおく ]
離れた場所画像をおく。クラス設定されているものは、PAGERに表示される
![]() 画像12 |
利点、クラス設定されているものは、PAGERが作成されますから、遠く離れた場所からでもサムネール画像を確認できます。スクロールはしません。
スクリプトの改造などの資料
アニメFADE処理する場合には、おおむね2つの処理の構造が考えられる 。

1.全体をFADEする。アニメが重い。上層部分(ボタンなど)が壊れる。標準ではこの構成になっている。
2.部分的にFADEする。陰影のあるALL-MASK層をFADEすると軽い。上層部分に影響がないが処理が増える。今回はこの処理について解説する。
・POPS-iBOX B2-B(pops-ibox-b2-b.js)は、POPS-iBOX A2を改造して、拡大縮小Opacity処理したものである。
・POPS-iBOX A2は通常の拡大縮小であるが、構造的にはOpacity処理を出来るように作っている。
・Opacity処理の場合、負荷が大きいので、内部の透過PNGで構成の陰影部分(#all_mask層)のみ処理して、負荷の少ないようにしている。但し、IE8ではz-indexを新たに付け加えないと、陰影部分の処理が出来ない特性がある。
・スクリプト、CSS変更(z-index)などが大変だが、動作が軽くなる。特にWordPressなどのCSSの多い環境では有効である。
・ボタンなどが分離されているため、Opacity処理で壊れない利点がある。(IEでボタンなどOpacity処理すると壊れる)
その場合の、修正点などを解説します。
Opacity処理、スクリプトの改造などの資料
問題点の数々

// 問題点の解決 //
1. IE7.8で、AlphaImageLoaderフィルターを処理する
2. IEでの不具合を抑えたPOPS-PANELを使用する(POPS-iBOXのHTML構造)
3. IE6(7)で、パネル全体の幅高さが、奇数の場合陰影が重なるのを偶数値に補正してほぼ解決(アニメで少し見える場合があるが、ほとんど気ずかない)
4. IE8で陰影が重なるのを修正画像(IE8専用の四隅画像を読み込む)を使用して解決
5. IEで画像が消えるなどの不具合がおこるのを、opacity処理で復活させる
6. ボタン、テキストなどにおきる不具合を、GIF画像を使用する、または使用直前に作り配置することで解決
7. IE8で、指定要素が認識できない不具合を、z-index指定することで解決
8. その他のIEの不具合などと解決
[ 原則としてIE7 IE8 でもAlphaImageLoaderフィルター使用 ]

IE7.8 AlphaImageLoaderフィルター処理をしないと、fadeTo() fadeIn()....カスタムアニメopacity処理など、opacity処理を伴う場合、透過PNNG32画像が黒くなり使用できません。
ところが、AlphaImageLoaderフィルター処理をすると、IE8で陰影の重なりが出る、バグが発生します。これは解決できます。
- 簡単なCSSの記述例 -
IE全てにAlphaImageLoader処理をする、IE以外はfilterがないのでスッキプする
#test_box3 .filters {
width: 100px;
height: 100px;
background: transparent url("../images/panel01.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/panel01.png',sizingMethod='scale');
}
background-imageはあとでjQueryで削除するように処理を行っています
・background: transparent urlはCSSからみたパスを設定
・AlphaImageLoader(srcはHTMLから見たパスを設定
わからない場合は、どちらとも http:// で始まる絶対urlで記入ください
IEでは簡単にいかない

BOXひとつ作るのに、IEでの問題不具合が多く、結構時間をついやしました。
1. 100%で陰影部材を伸ばしますが長くなりすぎますからマスクでカットします。mask1 mask2 2つに分割してまとめます。IE6では mask2 が bottom であると、旨く行きませんので、top left にします。
2. ところが、IEでopacity処理をすると、原因不明の黒い部分が発生します。旨く透過PNNG32画像が配置できないようです。mask1では正常ですから、IEでは背景の方向が問題のようです。
3. mask2に配置する透過PNNG32画像を2重のマスク状態にして、画像を流し込む方向などを調整しますと、黒い部分がなくなります。但し、IEではBOXに小さなズレが発生します。これらは下のback背景で見え無くなります。(bottom right を多く使用しますと、背景では修正出来ない隙間が出る場合があります。bottom right を避けてください。絶対な数値で組み立てていないため、あるはずの無い、100%の隙間をこじあけてしまいます。IEは不可解)
4. 完成したパネルの図です。状況に応じて配置する画像などの階層位置を決定します。mask2に画像を入れると何かと便利です。
5. 実際に使用するとすれば、まだまだ関連部材を適切に配置しなければなりません。IE8で各部材要素の認識が甘いなどの要因が重なりますと、多少複雑になります。
・特徴としては陰影などと一体構造のため、簡単に伸縮できることと、position: absoluteでほとんど組まれていますので、クロスブラウザであり、欠けなど無くスムーツに伸縮します。
・欠点としては、IEでの問題、不具合が多く発生することです。
・IE以外では、何の問題もありませんが。IEに合わせて作ってあります。
参考、パネルの構造 [ 基本的なBOXの構造 形式A ]
JSのHTML構造とCSS
★ブラウザ判定
//IEのみ影枠の補正を行うので、一括して判定フラグを設定しておくこちらを使用/IETesterで判定できる方法で記述しています
var browserIE = 0;//IE判定
var browser_v = 0;
if (jQuery.browser.msie) {
browserIE = 1;
if (navigator.userAgent.match(/MSIE (\d\.\d+)/)) {browser_v = parseFloat(RegExp.$1);}//IE6.7.8
}
★BOX一体成形R陰影枠のHTML構造
$('<div id="pops_panel"> \
<div id="allmask"><!-- allmask start --> \
<div id="mask"> \
<div class="ml filters"></div><div class="tm filters"></div> \
</div> \
<div id="mask2"> \
<div id="back"></div> \
<div id="bm_mask"><div class="bm filters"></div></div> \
<div id="mr_mask"><div class="mr filters"></div></div> \
</div> \
<div class="tl filters"></div><div class="tr filters"></div><div class="bl filters"></div><div class="br filters"></div> \
</div><!-- allmask end --> \
</div>').prependTo("body");
実際の使用ではbodyにprependToします
実際使用するには、必要なコンテンツ、画像、ボタン、などを適切に配置して使用します
★99.99%補正 / IE8 影の重なりを除去する、必要ない場合は削除
if (browser_v == 8) {
$('#allmask').css({'width':'99.99%','height':'99.99%'});
}
XHTML1.0標準モードで作動している場合のみ、有効です
allmaskは通常100%ですが、99.99%にすることによりIE8のバグ、透過画像の重なりを除去できます
この場合、CSSで修正画像の読み込みは不要になります
逆にCSSで修正画像の読み込みの場合は
if (browser_v == 8) {
//$('#allmask').css({'width':'99.99%','height':'99.99%'});
}
無効にする、または削除する、必要があります。
--------------------------------------------------------------------------
★HTMLでIE8修正画像を、CSSで読み込む場合
<link rel="stylesheet" href="css/xxxxx.css" type="text/css" media="all" />
<!--[if IE 8]>
<link rel="stylesheet" href="css/xxxxx_ie8.css" type="text/css" media="all" />
<![endif]-->
--------------------------------------------------------------------------
★CSSの記述例 xxxxx.css
白 20x20 _w6 系を使用した場合、
#pops_panel * {
padding: 0;
margin: 0;
}
#pops_panel {
z-index: 7000;
display: block;
position: absolute;
top: 0;left: 0;
text-align: left;
}
#pops_panel #allmask {
display: block;
position: absolute;
top: 0;left: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
#pops_panel .tl {
display: block;
position: absolute;
top: 0;left: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_tl_w6.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_tl_w6.png',sizingMethod='scale');
}
#pops_panel .tr {
display: block;
position: absolute;
top: 0;right: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_tr_w6.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_tr_w6.png',sizingMethod='scale');
}
#pops_panel .bl {
display: block;
position: absolute;
bottom: 0;left: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_bl_w6.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_bl_w6.png',sizingMethod='scale');
}
#pops_panel .br {
display: block;
position: absolute;
bottom: 0;right: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_br_w6.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_br_w6.png',sizingMethod='scale');
}
#pops_panel #mask {
display: block;
position: absolute;
top: -20px;left: -20px;
width: 100%;
height: 100%;
overflow:hidden;
background-color:transparent;
}
#pops_panel .ml {
display: block;
position: absolute;
top: 40px;left: 20px;
width: 20px;
height: 100%;
background: transparent url("../images/r_ml_w6.png") repeat-y;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_ml_w6.png',sizingMethod='scale');
}
#pops_panel .tm {
display: block;
position: absolute;
top: 20px;left: 40px;
width: 100%;
height: 20px;
background: transparent url("../images/r_tm_w6.png") repeat-x;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_tm_w6.png',sizingMethod='scale');
}
#pops_panel #mask2 {
display: block;
position: absolute;
top: 20px;left: 20px;
width: 100%;
height: 100%;
overflow:hidden;
background-color: transparent;
}
#pops_panel #back {
display: block;
position: absolute;
bottom: 40px;right: 40px;
width: 100%;
height: 100%;
background-color:#FFFFFF;
}
#pops_panel #mr_mask {
display: block;
position: absolute;
top: -40px;right: 20px;
width: 20px;
height:100%;
overflow: hidden;
background-color: transparent;
}
#pops_panel .mr {
display: block;
position: absolute;
top: 40px;right: 0;
width: 20px;
height: 100%;
background: transparent url("../images/r_mr_w6.png") repeat-y;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_mr_w6.png',sizingMethod='scale');
}
#pops_panel #bm_mask {
display: block;
position: absolute;
bottom: 20px;left: -40px;
width: 100%;
height: 20px;
overflow: hidden;
background-color: transparent;
}
#pops_panel .bm {
display: block;
position: absolute;
bottom: 0px;left: 40px;
width: 100%;
height: 20px;
background: transparent url("../images/r_bm_w6.png") repeat-x;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_bm_w6.png',sizingMethod='scale');
}
--------------------------------
★IE8修正画像用CSSの記述例 xxxxx_ie8.css
#pops_panel .tl {
display: block;
position: absolute;
top: 0;left: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_tl_w6_4.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_tl_w6_4.png',sizingMethod='scale');
}
#pops_panel .tr {
display: block;
position: absolute;
top: 0;right: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_tr_w6_4.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_tr_w6_4.png',sizingMethod='scale');
}
#pops_panel .bl {
display: block;
position: absolute;
bottom: 0;left: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_bl_w6_4.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_bl_w6_4.png',sizingMethod='scale');
}
#pops_panel .br {
display: block;
position: absolute;
bottom: 0;right: 0;
width: 20px;
height: 20px;
background: transparent url("../images/r_br_w6_4.png") no-repeat;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/r_br_w6_4.png',sizingMethod='scale');
}
実際使用するには#pops_panelを他の名前に変更します
陰影部の長さが奇数の場合陰影が重なる。偶数値では出ない。アニメ中はほとんどわからない。
■IE6および (IE7で)全体が奇数の場合影が重なる
・IE6は標準モード、互換モードなど関係なく全体が奇数の場合、右側または下側の影が重なる。
・IE7の場合は、通常はでません。DOCTYPEなどの設定が間違っている場合にでるようです。
・ほとんどがXHTML 1.0 標準モードで作動しているのが現状ですので簡単修正出来るわけで、問題となるのはIE6だと思います。
・重なりの出る方向の全体を偶数値にすると影の重なりは消えます、但し伸縮のアニメ中は出ますが伸縮は、奇数偶数の交互ですから消えたり出たりでほとんど気になりません。修正の場合は内部画像、またはコンテンツではなき全体の大きさに1ピクセルをプラスします。
・これは、今回のパネル形式ではなくBOXの外側に陰影を配置した場合も同じです、修正も同じ方法ですが、全体を修正するか画像を修正するか迷うところです。
完全除去は難しいようです。これ以上の修正方法はまだ見つかっていません。
透過陰影部の幅が狭く、かつ薄い場合はほとんど目立たない場合があります。修正するかは個人的な判断になります。
■奇数の場合影が重なる、修正後の見え方
・表示スタート時および、LOADING中は、修正していませんので 最悪 START のように見えます。(スタート時の修正も可能ですが、ほとんどがすぐに拡大に移行しますので、修正は行っていません)
スタート、終了時に出ないよう修正しました。アニメ終了時直前に少し見える場合がありますが、ほとんどわかりません。
・アニメ中は、ほとんど見えません。
・アニメ拡大終了時は、補正されますので見えません。
・白色、黒色で見え方が若干ちがいます。陰影の濃さ幅にもよりますが、ほとんどわからない状態です。
・全ての終了処理時、サムネール大に縮小された時点で少し見える場合がありますが、すぐに消えます。
JSによる修正方法
all_W 全体の横幅
all_H 全体の高さ、とすると
//奇数なら+1する
if (all_W % 2 != 0) {all_W += 1;}
if (all_H % 2 != 0) {all_H += 1;}
奇数なら +1 して偶数に修正する、1ピクセル広くなっても見た目はわからない
-------------------------------------------------------------------------------
実際にはall_W all_Hを計算した時点でfunction odd_number_Correction()を実行して修正
IE以外は修正していない
詳細略す...................
//IE67奇数補正
odd_number_Correction();
詳細略す...................
//共通IE67奇数補正function
function odd_number_Correction() {
if (!ie67) {return}
if (all_W % 2 != 0) {all_W += 1;}
if (all_H % 2 != 0) {all_H += 1;}
}
IE8のバグ陰影が重なる。解決には2種の方法がある。
■画像によるIE8の陰影の重なりの修正方法[ 1 ]
IE8の陰影の重なる部分は常に同じ位置である。(気が付くのが大変遅れた)
・[形式A]の例です。画像管理が繁雑になってきてるため、他は作っていません。
・IE8は陰影の重なりの位置は8個の部材でつくれば[形式ABC]ともにに同じ位置である。
・IE8のバグであるが見た目がわるいので修正せざるを得ない、XHTML 1.0 標準モードで作動している場合は99.99%の指定方法で修正できるが、互換モードの場合これが効かないので、画像による修正をする。
・図のように重なりの出る部分の側にある四隅画像(TR BR BL)の陰影部分をカットすればよい、左上TLには出ない。 不透明部分は重なっても大丈夫なのでそのままにしておく。
・左上(TL)画像は修正の必要はない、但しマスクの形態などが変わればどうなるかは不明。
・修正画像は同じサイズで同じデザインであれば、[形式ABC]共通で使用できます。
・注意、画像修正を行う場合は、99.99%補正をしないで下さい。逆に隙がでます。
・奇跡的にこの構造でうまく行ったに過ぎないのかも知れない。状況により修正箇所をかえねばならないとか、修正出来ないなど、おきる可能性はある。
IE8の場合だけ修正画像のを適用させればよい、動作モードなどに関係なく使用適用できる。
// バグ修正されるかも知れないと言う情報はあるが、いまだ修正ならないから無理かも知れない?。
IE8専用修正画像、CSSの読み込み
先に修正画像を配置した pops-ibox-b2-b_ie8.css を作っておく
<link rel="stylesheet" href="css/pops-ibox-b2-b.css" type="text/css" media="all" />
<!--[if IE 8]>
<link rel="stylesheet" href="css/pops-ibox-b2-b_ie8.css" type="text/css" media="all" />
<![endif]-->
■IE8の陰影の重なりの修正方法[ 2 ] 99.99%の謎
・[形式ABC]とも allmask階層(100%x100%)があれば有効です。
・IE8では透過PNG32画像にマスクをした構造の場合、透過PNG32画像の境目が重なるバグがあります。一応はその長さを確定してやれば一旦は消えます。切り替えが面倒なだけです。(アニメ中は除去できない)
・透過PNG32画像で構成した部分全体を、div要素でWRAPして、div要素縦横とも99.99% にするとバグが出ないという現象です。(アニメ中でも出ない)
・マスク材の食み出し除去などのためallmask階層の中に、陰影全体を入れていましたので、偶然出来ただけですがこのような構造の場合だけかもしれません。
・何とも理解しがたいことですが、偶然の発見です。図で言う 陰影をWRAPしているallmaskを縦横とも100%から 99.99% (99.999%でも可) にしたら、IE8の陰影の重なりがなくなりました。アニメ伸縮中でも重なりません。
何故なのかも不明、「ハテナ」の一言。バグが解決するならなんでも良い、他に影響はないようだ。
但し、XHTML 1.0 標準モードで作動している場合のみ。 ほとんどがXHTML 1.0 標準モードで作動している現状ですからこれは拾いものです。他に応用できるかも知れません。(HTML 4.01 でも可能ですが、互換モードが多い)
透過陰影部の幅が狭く、かつ薄い場合はほとんど目立たない場合があります。修正するかは個人的な判断になります。
注意、HTML 4.01 の場合、標準ではなく互換モードで作動している事が多いので、面倒でもCSSでの「画像での修正」のほうが無難である
■[ JSでの99.99%補正を行っていいる箇所を修正する ]
■修正する
//HTMLのパネルを作成、付属処理を行う、処理後非表示にします
function makebase () {
途中略...........
//IE8 影の重なりを除去する、必要ない場合は削除
if (browser_v == 8) {
$('#allmask').css({'width':'99.99%','height':'99.99%'});
}
途中略...........
}
上のスクリプトの部分
$('#allmask').css({'width':'99.99%','height':'99.99%'});
を
//$('#allmask').css({'width':'99.99%','height':'99.99%'});
にして実行させないようにする
または全体を削除する
■ IEにおけるopacity処理
・図に示すように、パネル画像ともにopacity処理した場合、大変きれいです。
・IEでは、fadeTo() fadeIn() fadeOut()などの処理でも、問題がおきるときがあります。
1. 画像が消える。
alpha-filterの影響です。消える画像のdiv要素 opacity:1 にするとなおります。
2. ボタンなどが壊れる。
opacityを削除するか、使用するとき作り後付けする。または使い回しをしない。壊れない画像を使用する。などで対処する。
3. 陰影パネル全体が消えてなくなる。
IE6で主に起こります、陰影パネルの外側(#allmask)が100%のため実寸が取得できなくなった。実寸を与えればなおります。
等があります、、、
・完全に補正できるまで、カスタムopacity処理を控えるのも、1つの方法かも知れません。
[ 実際の処理の例 ]
★実際の処理の例
IEでアル、事前に判別しておく
browserIE = 1;
//画像拡大表示処理
var viewphoto = function () {
★必要でないものは事前に display:none 消しておく
途中略..................
★全体を消す、CSS処理なので中の要素も全て opacity:0 になる
★IEでは alpha-filter 処理される
//opacity CSS処理/全体を opacity で消す
items_box.css({'opacity':0});
var opacity_v = 1;
//拡大速度
var v_speed = 600;
//画像を移動/横自動
backimage.animate({'top':topbox_H,'height':show_H},v_speed);
★opacity処理はカスタムである、jQueryの正式なアニメでは無い
★重要、時間のかかる重い処理を最後にすること、順序を違わせると、opacity処理が終了しない内に次に進んでしまう
IE6.7は javascript実行が遅いから注意が必要である、他のアニメであっても同様に重い処理を最後にすること
//枠全体opacity拡大処理
items_box.animate({'top':box_pos_Y,'left':box_pos_X,'width':all_W,'height':all_H,'opacity':opacity_v},v_speed,function() {
★animate終了あと、すぐに壊れたものを修正(復活)する
//opacity 処理のため壊れているので、復活させる
//必要のないものは非表示にしておく
★IEの場合 alpha-filter が残ってしまうので復活させる
if (browserIE) {
//opacity 処理
backimage.css({'opacity':1});//★中の画像
items_loading.css({'opacity':1});//★loadingも処理したほうが良い
}
途中略..................
});
}
★loading は事前に消しているが影響をうけているので処理した
画像を含む要素は、このようなことが結構あるから、注意が必要、IEは難しい
特に、IE8 は要素の認識が IE6.7 よりも甘いからより注意が必要である(厳密に要素指定する、必要であれば z-index をつける)
★状況によりだが、opacity処理(fadeInも含む)をすると、IEで画像の黒部分に白い点がでる場合がある
1.IE、画像の黒補正
if (browserIE) {backimage.children("img").css({'opacity':1});}
画像のopacityを1にすることで、防げる場合がある
2.画像のDIV要素をopacity処理するのではなく、画像そのものをopacity処理すると防げる場合がある
通常は、backimage.animate({'opacity':1},v_speed)、のところを
画像そのものを、backimage.children("img").animate({'opacity':1},v_speed)、と処理する
但し、上記 1.2の方法が必ずうまくゆくとは限らないので注意、非常にわからない部分がある
ほぼ、IEでおきます。IEのalpha-filter処理の影響です。
■ボタンなどが壊れる
・ボタン shadow処理した文字などもopacity処理で壊れる場合があります。ほとんどがIEでのalpha-filter処理の影響です。
・パネルのopacity処理の影響の受けない層に配置する。または周囲の透過PNG32画像に重ならないように配置する。ボタンの背景を配置するBOXの色に塗る。などの対策があります。
・カスタムアニメopacity処理、FADEなどをしないでCSS変更の機能(display:block)で表示する。
・jQueryで使用直前に作り、配置する。時間はほとんどかかりません。
・CSSでshadow処理した文字は、IE以外でもこわれます。ブラウザにより違います。jQueryで使用直前に作り、配置するほうが無難です。
・その他、jQueryで使用直前に作り配置するとき、ベースが透明度0の場合は見えなくなります。ベースの幅高さなどが取得できない状態(見た目ではわからない)でも、配置できないことがあります。ベースの幅高さを設定しなおせば旨くゆきます。
($('#ベース').width()を実行すれば配置できることはありますが、完全ではありません。)
大変いい加減な解決法ではないか、と言われれば、そのとうりである。
IE8で、指定要素が認識できない不具合。
■IE8の指定要素の認識
・IE8のjQueryで処理したい要素を指定してアニメなどを行う場合、認識が甘いようです、入れ子になっている場合にその中の要素を認識しません。
たとえばallmask階層(陰影枠)のみFADEしたい時などIE以外では全て適切な処理をしますが、IE8は変化ありません。
テストにallmask階層の背景を「赤」で染めてFADEして見ました、図のように認識はしています、確かにallmaskの背景だけFADEしました、入れ子のその部分だけ認識して処理しているようです。
・IE8はz-indexを指定していれば、指定要素の中の入れ子部分もアニメ処理する。
・注意、z-indexを指定した場合、他のところも、適切にz-indexを指定しなければならない場合があるので、指定してください。(IE以外でエラーがでる)
つまり、思うようにアニメさせたいなどの使用条件があれば、IE8だけのためにHTML構造を替えなければならないに事になります。
・DIV入れ子になっていない部分、画像のあるDIV、TABLEなど認識するが、これも絶対大丈夫とは断言は出来ない、IE特有の要素認識の甘さである。
IE8の「要素の認識」は他と決定的に違う。これが、CSS標準に準拠した結果だというが、、、
[ 1 ] カスタムopacity処理の不具合。
■ IEにおけるopacity処理 (説明重複)
・図に示すように、パネル画像ともにopacity処理した場合、大変きれいです。
・IEでは、fadeTo() fadeIn() fadeOut()などの処理でも、問題がおきるときがあります。
1. 画像が消える。
alpha-filterの影響です。消える画像のdiv要素 opacity:1 にするとなおります。
2. ボタンなどが壊れる。
opacityを削除するか、使用するとき作り後付けする。または使い回しをしない。壊れない画像を使用する。などで対処する。
3. 陰影パネル全体が消えてなくなる。
IE6で主に起こります、陰影パネルの外側(#allmask)が100%のため実寸が取得できなくなった。実寸を与えればなおります。
等があります、、、
・完全に補正できるまで、カスタムopacity処理を控えるのも、1つの方法かも知れません。
[ 2 ] #allmask層を旨く使う。
1. #allmask層は陰影枠の階層です。ここだけをカスタムopacity処理をすれば、全体を処理するより軽くなります。
2. IE8で旨く認識しませんので、適切に z-index を指定する必要があります。
3. IE6で高さの認識を出来なくなる場合がありますので、適切に処理します。
4. #allmask層のmask2層に画像を入れると、1回の処理で色々できます。
5. 設計するHTML構造次第で、正確もかわりますし、CSS処理も違ってきます、効率の良い構造を作ることが鍵です。
IE6で高さの認識を出来なくなる場合など
1. #allmask 層の高さを実寸で与えてやると直るが、また次のアニメで100%にもどさなくてはならない不都合がある。
2. $('#allmask').width();を実行すると、一時的 (#allmask 層は実際 100% である、瞬間的に実寸値を与えるが、次に瞬間的に、100%に戻す処理も行っている) に#allmask 層に実寸値を与えることが出来る。しかし完全ではない。何らかのアニメを連続させると、また壊れる場合がある。
3. IEでopacity処理されている要素に、append などする場合、opacityを合わせてやらないと旨く行かない場合がある。
4. jQueryの標準のアニメである、fadeIn() fadeTo()も1つの要素に連続する処理の場合、旨く行かない場合がある。opacity:1を旨く設定してやると直る。
IE6の高さが取得できなくなる場合の補正/次のfunctionを実行する
//IE6安定しないので/アニメ表示を行うので100%に戻す
if (browser_v == 6) {setallmask_parsent();}
//all_maskでopacity処理するとIE6で高さ取得が不安定/実寸値にする
if (browser_v == 6) {setallmask_value(all_W,all_H);}
//all_mask階層縦横100%にする
function setallmask_parsent() {
all_mask.css({'width':'100%','height':'100%'});
}
//all_mask階層縦横、原寸にする
function setallmask_value(w,h) {
all_mask.css({'width':w,'height':h});
}
[ 3 ] IE6 透過PNG32画像の大きさ制限。
■ IE6 透過PNG32画像の大きさ制限
・IE6の場合外周に配置する透過PNG32画像の大きさに制限があります、必ず偶数値で14x14ピクセル以上のものを使用ください。
・小さいと、図Aのようになります。構造によりCSSで補正できる場合もありますが、大変厄介です。
・全体の横幅が奇数の場合、図Bのようになります。奇数補正(全体を偶数にする)で直る。つまりは全体が偶数になるように部材も配慮しておかねばならない。
・透過PNG32画像の幅が奇数の場合は、右側が、1ピクセル、ズレて図Cのようになります。
・偶数14x14以上のものは問題なく使用できるようです。偶然20x20画像でしたので旨く行ったのですが、これらは後でわっかたことです。(14x14 16x16 18x18 20x20 ...)
・20x20画像で充分いろいろなRの半径、デザイン様式のものが作れます。軽くするには陰影部を狭くすることです、また影が薄いと重なりが目立ちません。
・伸縮リピートする方向は短くとも良いのですが、リピートに時間がかかる場合があります。20x20は問題はでません。
・縦横同じ大きさの正方形で作ったほうが、制作が効率的であり、CSSの記述、変更、が簡単です。
14x14 以下の不具合は、四隅画像の大きさが影響しているようです、IE6だけ寸法違いを使用する訳には行きませんので、統一してください。
IE6 透過PNG32画像の大きさ制限 2 (特殊な場合もある)
■ IE6 透過PNG32画像の大きさ制限 2
・図のように、基本的な構造のBOXの外側に陰影を配置するのは、特殊な例である。見栄えの観点からどうしても幅の狭い陰影を使用したい。
・通常のここで説明するPOPS-PANEL構造(内部に配置)では 14x14 の大きさが最低である。
・外部に配置する場合(特殊)は構造により14x14 で影の重なりが出来る場合がある。16x16 ならOKである。
・理解にお苦しむところだが、配置するページのCSSの影響が大きいようである。面倒ではあるが 16x16 以上を使用してみることである。
注意、外部に配置する場合(特殊)は構造的な問題も影響するようなので 16x16 以上を使用したほうが良いようだ。(私でも理解できない状況もある)
配布している通常のPOPS-iBOX(内部に配置する場合)は従来どうり 14x14 でもOKである。
※ 外部に配置する形式は、現在配布していません、将来頒布する可能性もあるので参考に記述しました。
[ 4 ] IE6 奇数を偶数にしても、陰影の重なりを完全には除去できない。
1. 全体の大きさを偶数値にすることで、ある程度は補正できますが、アニメ中に見えるときがありますから、完全ではありません。
2. IE6で、完全に除去することは出来ません。(あるかも知れないが、未だ発見できない)
3. 画像加工の際に、陰影画像の影になる部分の幅を小さくする。影の濃さをうすく仕上げるとあまり見えません。
4. IE6の無くなるのを待つしか、方法はありません。(対応しないサイトが増えています)
5. IE7で出る場合は、DOCTYPEの設定が間違っているときです、正しく記載ください。
6. 少々のことです、気になる、ならないは個人差があります。よって、気にしないのが一番の解決方法だ。
7. 最近ではIEを拒否するサイトもでています。こうなるとスコブル簡単です。日本では無理かナ。
★ほとんど「キズカナイ」程度のものですが、完全にIEのバグが修正されないので、記述しています。
[ 5 ] POPS-iBOX原型と頒布型との違いと、全体をOpacity処理する場合
■POPS-iBOX原型と頒布型との決定的な違い
・下層画像の配置と大きさの違いです。
・POPS-iBOX原型は、外周透過PNG画像の内部領域の大きさです。
・頒布型は、きれいに見えるように横幅を広くしています。(外枠の横部分は狭いほうがキレイ、原型は不細工だ)
・全体をopacity処理した場合(fadeIn fadeOut fadeToをも含む)、IEでは外周透過PNG画像と画像との重なり部分が透過してしまいます。(すきが出来る)
・対処方法として、画像にopacity:1の処理を事前に施しておくと直ります。
・全体をopacity処理しない、拡大縮小の場合は必要ありません。(POPS-iBOX b2 B2 C2は必要なし)
アニメ表示前ならどこでも良い、ここではloadimage = function のなかで処理している。
IEで背景の透過処理が旨く出来ないので、backimage.css({'opacity':1});を入れる。
//画像LOAD
var loadimage = function () {
//画像幅を大きくしたので、IEでopacity処理の場合、画像左右に隙が出来るので修正
if (browserIE) {backimage.css({'opacity':1});}
詳細略す...................
}
-------------------------------------
backimage.css({'opacity':1});
だけでも問題は起きない
//RESET終了処理
var resetview = function () {
途中略............
//画像伸縮
backimage.animate({'top':0,'height':show_H},v_speed,function() {
//全体をCSSでけす
items_box.css({'display':'none'});
//復活、opacity処理
all_mask.css({'opacity':1});
});
}
使いまわしのため、opacity 0になる部分をopacity:1にもどしている
all_maskを処理しているのでall_maskを戻す
・負荷が大きいので、内部の透過PNGで構成の陰影部分(#all_mask層)のみ処理して、負荷の少ないようにしている。
[ 6 ] 標準のPOPS-iBOXで、全体をOpacity処理する場合。
1. 全体をOpacity処理する場合、負荷が大きくなり、環境にもよりますが、スペックの良くないマシンでは動きがすこぶる悪くなります。出来るならさけてください。
2. IEでは、Opacity処理する内部が、壊れますのでopacity:1で復活させる必要があります。
3. 透過PNG32画像で構成された、ボタンなどは壊れますので、使用する直前に新規で作り配置する必要があります。使用後は削除します。
4. IE6でのall_mask階層高さ取得の障害がありませんので、その分簡単になります。
5. all_mask階層のみをOpacity処理する場合は、下画像以外は壊れませんので簡単ですが、上記の説明にしたがってください。
6. 他の構成よりも、一応軽いのですが、実際使用する場合はその環境に合わせることが重要です。
7. IE8での、z-indexの記述変更がいらない。元のままでよい。
8. アニメのスクリプトの記述が簡単になります。
9. どちらの方法を選択するかは、構成の大きさによる影響などと、個人的な好みの問題です。
新たにz-indexの記述変更をしないで、従来のPOPS-iBOX b2 B2 C2 でもOpacity処理は可能です。重くなるだけ。
//画像拡大表示処理
var viewphoto = function () {
途中略............
//画像を拡大移動
backimage.animate({'top':topbox_H,'height':show_H},v_speed);
//枠全体をopacity処理移動する
items_box.animate({'top':box_pos_Y,'left':box_pos_X,'width':all_W,'height':all_H,'opacity':opacity_v},v_speed,function() {
//opacity処理でこわれたものの復活処理
if (browserIE) {
items_loading.css({'opacity':1});//条件次第
//opacity処理の場合backimageが壊れるので必要
backimage.css({'opacity':1});
//その他必要なもの
$('要素').css({'opacity':1});
}
途中略............
});
}
//RESET終了処理
var resetview = function () {
途中略............
//画像伸縮
backimage.animate({'top':0,'height':show_H},v_speed,function() {
//全体をCSSでけす
items_box.css({'display':'none'});
//復活、opacity処理
items_box.css({'opacity':1});
});
}
使いまわしのため、opacity 0になる部分をopacity:1にもどしている
全体を処理しているのでitems_boxを戻す、必ず先に「全体をCSSでけす」を実行してから処理する
★使いまわしをしない場合は、すべてremove()削除するのが、通常の処理法なので事後の処理は無い
・色々と説明しましたが、ご理解ください。JSに説明の有るテキストをいれていますので、読んで下されば理解が深まるとおもいます。
・一度、JS雌型を作れば応用も楽になります。
・他のIEの不具合の解決に役立つこともあるかとおもいます。
[ 7 ] Opacity処理階層とコンテンツ階層を完全分離した構造にする方法
別の方法として、新たに分離した階層を重ねて、表示する方法も考えられます。上層階層はあとで表示するものであり、下層階層がアニメしているときは、常に非表示の状態です。
構造をかえてみる
$('<div id="pops_ibox"> \
<div id="allmask"> \
<div id="mask"> \
<div class="ml filters"></div><div class="tm filters"></div> \
</div> \
<div id="mask2"> \
<div id="back_wrap"><div id="back"></div></div> \
<div id="bm_mask"><div class="bm filters"></div></div> \
<div id="mr_mask"><div class="mr filters"></div></div> \
</div> \
<div class="tl filters"></div><div class="tr filters"></div><div class="bl filters"></div><div class="br filters"></div> \
<div id="back_image_wrap"><div id="back_image_wrap2"><div id="back_image_wrap3"><div id="back_image"><img /></div></div></div></div> \
</div><!-- allmask end --> \
</div><!-- pops_ibox end --> \
<div id="pops_ibox2"> \
<div id="centerbox"><img /></div><div id="topbox"><div id="line1"></div></div><div id="bottombox"><div id="line4"></div></div><div id="closetext"><p>CLOSE</p></div><div id="close_btn"><a title="close"></a></div><div id="loading"></div></div>').prependTo("body");
・#pops_iboxの上に#pops_ibox2階層をかさねます。大きさはともに同じですので、CSS記述など増えても簡単です。
・#pops_iboxをOpacity処理階層とします。IE6での大きさが取得できないバグは解消されます。
・#pops_ibox2を上層階層とします。Opacity処理の影響がおよびませんから、ボタンなどは保護されます。IE8が認識しない場合はz-indexをつければ良い訳です。Opacity処理で消えるものがあれば復活してやればよい。
・このような、考えで色々試しても良いとおもいます。
・この例では、loading の位置が同じですので、他に移動するなりの処置は必要です、、、
IEのOpacity処理の不具合などを、理解していればそう難しいものではありません。自由なアニメ処理、自由なデザインが可能です。
IEの性質など、記述してきましたので、それらを参考に自由なものを制作ください。
[ 8 ] 要素のアニメを高速にする
パネルと画像が分離してアニメ操作されていますので、同時に処理が開始されることが要求されます。
そのため要素のDOMの取得オブジェクトをキャッシュする方法が広くおこなわれています。この技法は欠かせません。
jQueryでは、$('#要素').anime({.............})などを実行する際、要素の位置をその都度取得しているのだそうです。
それを、キャッシュしておき、使用すると早く実行できるということです。
大変な効果があります。この技法がなければこのJSは作れません。
★よく使う、要素をキャッシュする。
//パネル作成
function makebase () {
詳細略す...................
//オブジェクトを保存
items_box = $('#pops_ibox');
center_box = $('#centerbox');
items_loading = $('#loading');
items_close = $('#closetext');
closebtn = $('#close_btn');
backimage = $('#back_image');
//allmask
all_mask = $('#pops_ibox #allmask');
詳細略す...................
}
★使用例、下の、画像拡大、そのほかの箇所で使用しています
//画像拡大
var viewphoto = function () {
詳細略す...................
//画像拡大
backimage.animate({'top':topbox_H,'height':show_H},v_speed);
//全体を伸縮
items_box.animate({'top':box_pos_Y,'left':box_pos_X,'width':all_W,'height':all_H},v_speed);
//allmask階層をフェード(fadeTo)
all_mask.animate({'opacity':opacity_v},v_speed,function() {
詳細略す...................
});
}
どうしても同時に処理したいため、キャッシュしています。
画像、全体、allmask階層が時間的に、ほぼ同時に処理されます、大変便利です。
【参考リンク】
[to-R] jQueryを良くする25のTIPS
自由なデザインとパネルの応用
自由なデザイン、自由な構造を構築可能

パネルの構造と性質、不具合など理解できれば、パネルを利用して、自由なデザイン、自由な構造を構築可能である訳です。
1. パネルだけ表示して、その上に画像、コンテンツなどを表示する。一番簡単。
2. パネルの中あるいは外に画像などを配置して、パネルとともに伸縮させる。
3. パネル以外、独立した階層にして、自由に構成する。
4. 出来上がりの予想図。外周の枠などは自由な色にもできる。ボタンなどを自由に配置する。
勿論、画像以外のコンテンツを表示することもできます。

各種アニメに対応できるので表現が豊か。
■パネル外周のデザインは自由
・外周枠材は8点の透過PNG32画像で構成されていますので、自作すればデザインは自由です。
・透過GIF画像でも使用できます、この場合IEでAlphaImageLoaderフィルター処理は不要です、影の重なりは問題になりませんので修正処理を少なく出来ます。
・Safariでは黒いものの伸縮が苦手のようです(白は問題ありません)。環境にも左右されるとは思いますが、Safariだけ若干アニメ速度を早くすると見栄えがよくなります。
★IEに対応しないでよければ、もっと簡単になるし、補正などは皆無になる。
ポイントは、IE9がどのような仕様になるか、IE8がいつまで使用されるかである。
★もっと良い方法、構造があれば改善していただければ、嬉しくおもいます。
■ このスクリプトは pops-ibox-b2 を改造し、カスタムopacity処理を追加したものである。( pops-ibox-b2-b )
ライセンス (GPL)
パネル構造、および付随Scriptの応用、再頒布などについて
- jQuery自体が、「GPLライセンス」ですので、それに順次ます。
- 掲載されたパネル、Scriptの応用、書き換え、再頒布などについては、当方の許可を得ることなく全て自由に行えます。
- Scriptの応用などによる発生する弊害、損害などは自己責任でお願いします。
- jQueryを応用した単なるパネルのシステムですので、問題になる箇所などはほとんどないとおもわれます。
- より良きものにして頂くため、パネルの改良、CSS箇所の発展改良、画像自動伸縮の改良などして頂き、発表される事を強く望みます。
画像引用: TOYOTA(株) ギャラリー、アーカイブギャラリー、より引用しました。http://ms.toyota.co.jp/jp/F1archive/





