2012-05-03 11 views
5

折りたたみ可能なセットにアニメーションを追加したいと思います。jQuery MobilejQuery mobileは折りたたみ可能なセットにアニメーションを追加します

<div id="tiles" data-role="collapsible-set" data-iconpos="right"> 
    <div class="tile" data-role="collapsible" data-iconpos="right">blablabla</div> 
    <div class="tile" data-role="collapsible" data-iconpos="right">blablabla</div> 
    <div class="tile" data-role="collapsible" data-iconpos="right">blablabla</div> 
</div> 

jQueryのモバイル完全にこれを処理し、私の3つの項目の折りたたみ可能なセットを示しています 私はこの単純な例をお見せしましょう。私が望むのはアニメーションですが、私はドキュメントで何も見つけられないようです。

私は(heightプロパティをアニメーション)CSSアニメーションがどのように動作するか、シンプルでテストしていませんが、しかし、いくつかの内部フラグを回すようにそれを行うためのjQueryのモバイル方法はありますか?

EDIT シンプルなjQueryアニメーションメソッドをテストして実際に動作します。誰かがこれを必要とする場合に備えて。デフォルトのブラウザで528MHzのAndroid携帯端末でもスムーズに動作します。私が追加したスニペットは本当に簡単です:

ここ
$(".ui-collapsible-heading").live("click", function(event, ui) { 
    $(this).next().css('height', '0').animate({ 
     height: '100px' 
    }); 
}); 
+0

です。私は問題は、 "展開"または "折り畳み"の遷移中にページ/ビューポートの大きさ(別名高さ)を扱うことだと思います。今すぐ折り畳みをクリックし、折り畳みが開いているときに、関連する高さが更新されます。これを「過渡期に」行うことは、おそらく資源ストレーナーであることにはひどいものです。それでも、JQM折りたたみ可能ウィジェット内の展開および折りたたみイベントに対して、それぞれの遷移クラス(スライドチェック・アウトのJQM CSSチェックアウト)を追加/削除するだけで試してみることができます。そして、何が起こるかを見てください:-) – frequent

+1

@frequent jQuery Mobileは折りたたみ可能なウィジェットの 'expand'と' collapse'イベントを公開しています。これらのイベントにバインドすると、デフォルトの動作を停止し、代わりにイベントをアニメートできます。下の私の答えを見てください。 – Jasper

+0

@ジャスパー私はイベントについて知っていた、彼らが露出しているか分からなかった。どうも!また、非ページ要素にはJQM css3クラスも使用しています。折りたたみの難しい部分は、「インライン/スタティック」要素(絶対配置)に対するものです。したがって、インライン要素でcss3アニメーションを使用する場合、私はトランジション中にページパディングのようなものを更新する方法がありません。ですから、polyfill固定フッタを使ったios4では、フッタは遷移中に見えなくなるでしょう - それは深刻な問題ではありませんが、まだまだ... – frequent

答えて

6

屋に行く:

$('[data-role="collapsible"]').bind('expand collapse', function (event) { 
    $(this).find('p').slideToggle(500); 
    return false; 
});​ 

私はあなたが私はそれを少しいじっためつもりだったアイデアが好きでした。これは、jQuery Mobileが折りたたみ可能なウィジェットを制御するようにフックしているので、ヘッディング要素にバインドするのが少し面倒です。

return false;はデフォルト動作を停止し、他の行はjQuery slideUp/slideDownのアニメーションを使用してコンテンツの表示/非表示を切り替えます。また、.fadeToggle()を使用するか、独自のアニメーションをロールすることもできます。 event.typeにチェックを入れると、発生したイベントに基づいてアニメートできます。ここで

はデモです:http://jsfiddle.net/VtVFB/

+0

改良されたソリューションをお寄せいただきありがとうございます –

+0

私はhtmlに関する豊富な経験はありませんが、jqueryのモバイル権利を使いこなしています今。このコードスニペットはどこに行きますか? – Ryan

+0

@Ryanこのコードは、特定のページまたはページセットの 'pageinit'イベントハンドラ内に配置します:' $(document).on( "pageinit"、 "#somePageID、#someOtherPageID"、function(){.. 。ここにコードを置く...}); '。この 'pageinit'イベントハンドラは、グローバルスコープで実行する必要があります。 – Jasper

0

コードは完全に右ではありません。 拡張崩壊イベントのデフォルトのjqueryモバイル実装である を上書きしますが、展開崩壊アイコンの変更は処理しません。

良いコードは次のようになります。

$('[data-role="collapsible"] h3:first').bind('click', function (event) { 
    $(this).next('p').slideToggle(500); 
    return false; 
});​ 
2

1.4 jQueryのモバイルで、最大あなたの代わりにexpandcollapsecollapsibleexpandcollapsiblecollapseイベントにバインドする必要があることに注意してください。だから、折りたたみ可能なカーソルを変更doesntのことのために完全なコードは、偽のため、戻りの

$('[data-role="collapsible"]').on('collapsibleexpand collapsiblecollapse', function(event) { 
    $(this).find('p').slideToggle(500); 
    return false; 
}); 
+0

これは私のために働いた、このセレクタはどのように動作するのか説明できますか?$( '[data-role = "collapsible"]') ' –

0

受け入れ答えdoesntのアカウントとなり、これが私の答えの作業です:

私のプロジェクトでは、それはへの相対的な内容でした[date-role="collapsible"]$(this).find('>*:not(h3)')

/* animate collapsible-set */ 
$('[data-role="collapsible"]').on('expand', function (event) { 
    $(this).find('>*:not(h3)').each(function() { 
     if (!$(this).is(':visible')) { 
      $(this).stop().slideToggle(); 
     } 
    }); 
}).on('collapse', function (event) { 
    $(this).find('>*:not(h3)').each(function() { 
     if ($(this).is(':visible')) { 
      $(this).stop().slideToggle(); 
     } 
    }); 
});