近年のおしゃれ思考に則って、ウィンドウをパッと消えたりせずに、フェードアウトする方法。見た目が柔らかくなっておしゃれ風になるが、機能面でこれと言ったメリットはない。でもやる。
ウィンドウのopacityプロパティを使えば、半透明のウィンドウが作れる。値の範囲は [0.0-1.0] で、0.0が完全な透明、1.0が全く透けない普通の状態。
普段から、半透明ウィンドウにしたい機会もない。見えなくするには visible = fakse にしたり、もういっそclose()で閉じてしまえばいいし。スケスケウィンドウという物自体需要が少ないように思う。opacityプロパティがあるのだからなんかやってみよ~と思いついたのが、ウィンドウのフェードイン/アウトくらいしかなかった。
これを適当な数(0.1ずつとか)下げていけばだんだん消えていくように見えますね。
これをいつ発動させるかって、ウィンドウが消える時。なのでonCloseに書けばいい。onCloseはウィンドウが閉じられる直前に実行されるので、だんだん薄くなっていって、最後に消える。
//0になるまでループ
w.onClose = function(){
while( parseFloat(this.opacity) > 0 ){
this.opacity -= .1; //0.1ずつ引いていく
$.sleep(10); //強制的に停止しないと早すぎてアニメーションして見えない
}
}
parseFloatしてるのは、while内の比較がなんかうまく行かずにopacityが [0.0-1.0] の範囲外になってしまい、エラー吐くことがあったので入れた。入れたらエラーにならなくなった。型変換されてちゃんと比較できてなかったのかしら? なくても大丈夫かもしれないけど、エラーでたらやっとくといい。
もうわかりますかね?今度はopacityが増えるように opacity += .1にしてonShowに書いたらいいですかね!!・・・ダメですね。さっきも書いたとおり、onCloseは実際closeされる直前に実行される。onShowも同じ。実際showされる前に実行される。showされる前ってことはまだ見えてない。見えてないけど、内部的には不透明度0から上げていって、1.0になったら表示!って。それフェードインじゃない。
となれば、普通にshowの後に書けばいい。w.show(); のあとに透明度(opacity)を変更するコードを書けばいい。書けばいいんだけど。1つ問題がある。
ウィンドウの種類がいくつかあるのは知ってるはず。dialog、palette、window。windowは使わないとして、dialogかpaletteが多いと思う。問題なのはdialog。
dialogはshow()した後、そのウィンドウ閉じるまで次の行に進まないのよね。てことは、show()の後に透明度変更してももう消えてんぢゃん!!
今の所、他に方法が思いつかないのでdialogではフェードイン出来ない。と思ってます。paletteの時はshow()の後でやればOK。