IEのsunsetエフェクトにも中央に吸い込まれる効果を追加したい
メインの開発PCが帰ってくるまでは、Vistaでガマン中。
uu.module.effect.sunset() は IEで動作するときに限り、中央に吸い込まれるような効果がありません。
今回は「実装しようとしたけどダメだったよ」日記です。
sunsetエフェクトは http://uupaa-js.googlecode.com/svn/trunk/demo/module/uu.module.effect.htm の右下のやつです。
Filter で同様の効果がないか調べた
RevealTrans というトランジションの2番(CircleIn)が中心に向かって消える効果をもっているようです。
実装してみた
IE用のsunsetメソッドに、▼▲の部分を追加し、_circleIn メソッドを追加します。
uu.ua.ie && uu.mix(uu.module.effect.prototype, { sunset: function(elm, param /* = { speed, fn, keep: false, revert: false, scanLine: false, roundRect: true } */) { var pp = this._prepare(elm, uu.mix.param(param || {}, { scanLine: false, roundRect: true })), run = 0, R = this._revert; uu.css.show(elm); function next() { (++run === 2) && (R(elm, pp.revert), pp.fn(elm)); } this._wave(elm, 0, pp.speed, next, pp.roundRect); this._fade(elm, 0, pp.speed * 2, next, 1, 0); // ▼▼▼▼▼▼ this._circlein(elm, speed / 1000); // ▲▲▲▲▲▲ }, _circleIn: function(elm, duration) { var id = "DXImageTransform.Microsoft.RevealTrans"; elm.style.filter += uu.sprintf(" progid:%s(duration=0.1,transition=2)", id); elm.filters[id].apply(); // 【A】 elm.filters[id].play(duration); },
動きそうなのに、なぜか動かない
MSDNのサンプルをよく見ると、【A】 の辺り(apply()の後、play()の前)に、こんなコードがこっそり紛れ込んでいます。
elm.style.visibility = "hidden";
どうやら
RevealTrans は元の要素が表示されていると機能しない(効果が見えない)エフェクトらしいです。
# MSDNのどこにもそれらしい記述は見つからなかったけど。
ダメだった
elm.style.visibility = "hidden";
する必要がある限り、他のエフェクトとは連携できませんね。残念。
おまけ
IE8β2ではてなダイアリーを見ると、コメントと本文が重なって表示されます。
# 日記が読めないよ
こういうのは、そのうち直るもんなんでしょうか。