両方の要素にクラスを追加および削除することにより、2 つの要素間の遷移を作成しようとしています。jQuery Mobile が提供するトランジションとクラスを使用しています。
を使用して動作させましたsetTimeout
が、これは動作するはずの方法ではありません。
これが私が現在行っていることです:
_transitionEndEvents : "webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd"
// triggered by a radio button being changed
_onChange: function (e) {
var self = this,
el = self.element,
o = self.options,
activeElement = el.children().filter(".ui-carousel-active"),
transition = $.mobile._maybeDegradeTransition( o.carouseltransition ),
complete = function (li, clear) {
var removeActive = clear ? "ui-carousel-active" : "";
// don't like
setTimeout(function(){
li.off( self._transitionEndEvents, complete )
.removeClass( o.carouseltransition + " in out " + removeActive);
},200);
}
// active elements needs to transition out
activeElement
.addClass(transition + " out")
.on( self._transitionEndEvents, complete(activeElement, true) );
// element clicked contains a reference to the element
// that should be the new active element
e.target.reference
.addClass(transition + " in ui-carousel-active")
.on( self._transitionEndEvents, complete(e.target.reference) );
}
だから私の考えは、非アクティブ化される要素とアクティブ化されなければならない要素の両方が同じcomplete
機能を共有し、ui-carousel-active
削除されるという違いがあるということでした。
私の問題は、transitionEnd
イベントがすぐにトリガーされるため、トランジション クラス (transition
たとえばslide
) とin/out
がすぐに削除されるため、トランジションが画面に表示されないことです。
を追加するとsetTimeout
これは解決しますが、 をリッスンする必要はありませんtransitionEnd
。
質問:トランジションの終了後ではなく、すぐ
にトリガーが起動するのはなぜですか? transitionEnd
これを行うより良い方法はありますか?
ありがとう!
EDIT :
jQuery Mobile のトランジションは CSS3 トランジションであり、要素へのクラスの追加/削除によってトリガーされます。例えば:
/* slide up */
.slideup.out {
-webkit-animation-name: fadeout;
-webkit-animation-duration: 100ms;
-moz-animation-name: fadeout;
-moz-animation-duration: 100ms;
animation-name: fadeout;
animation-duration: 100ms;
}
.slideup.in {
-webkit-transform: translateY(0);
-webkit-animation-name: slideinfrombottom;
-webkit-animation-duration: 250ms;
-moz-transform: translateY(0);
-moz-animation-name: slideinfrombottom;
-moz-animation-duration: 250ms;
transform: translateY(0);
animation-name: slideinfrombottom;
animation-duration: 250ms;
}
.slideup.in.reverse {
-webkit-animation-name: fadein;
-webkit-animation-duration: 150ms;
-moz-animation-name: fadein;
-moz-animation-duration: 150ms;
animation-name: fadein;
animation-duration: 150ms;
}
.slideup.out.reverse {
-webkit-transform: translateY(100%);
-webkit-animation-name: slideouttobottom;
-webkit-animation-duration: 200ms;
-moz-transform: translateY(100%);
-moz-animation-name: slideouttobottom;
-moz-animation-duration: 200ms;
transform: translateY(100%);
animation-name: slideouttobottom;
animation-duration: 200ms;
}
したがって、クラスを追加するslideup in
と、スライドアップ トランジションがトリガーされます。クラスslideup in reverse
を追加すると逆になります。