私は小さなアプリを構築しており、AngularJS を使用しています。アプリ内には折りたたみ可能な要素が必要です。Twitter Bootstrap を使用すると、ターゲット要素とトリガーにライブラリといくつかのタグを追加するのと同じくらい簡単になります。
しかし、ブートストラップやその他のような他の外部ライブラリをロードしないようにしているので、Angular で同じ動作を実現しようとしていました:
$scope.collapse = function(target) {
var that = angular.element(document).find(target),
transitioned = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd otransitionend',
'msTransition' : 'MSTransitionEnd',
'transition' : 'transitionend'
},
_transitioned = transitioned[ Modernizr.prefixed('transition') ],
height = that.outerHeight(true);
if (angular.element(that).hasClass("in")) {
that.height(0);
} else {
that.height(height);
};
that.on(_transitioned, function() {
that.toggleClass("in");
});
};
ご覧のとおり、高さを遷移させようとしています (要素には高さの遷移があるため)。最後に、クラスを追加するだけin
です。しかし、トランジションエンドでリッスンしている場合、その要素内のトランジションエンドでトリガーされるため、うまく機能しません。
angular だけで折りたたみ可能なブートストラップを書き直すにはどうすればよいですか? shown
ブートストラップが on 、hidden
またはshow
、のようなイベントは必要ありません。hide
トランジションを使用して要素の単純な折りたたみをトリガーし、要素の高さを動的に保つ必要があります(固定の高さは必要ありません。そうでない場合は、単に使用します崩壊を達成するための CSS )。正しい方向に正確に特定する必要があるだけです:)