2012-04-02 7 views
9

jqueryモバイルで垂直コンテンツスクロールを無効にする方法はありますか? ページコンテンツのすべてのスクロールを無効にします。おかげさまで jQueryモバイル無効ページコンテンツ垂直スクロール


私はjquery.mobileページを作成し、コンテンツにはjquery.mobile.scrollviewを追加します。 私はscrollviewを使用すると、ページの内容が上下にスクロールします。スクロールコンテンツをどのように無効にできますか?マイページコード:

<div id="page2" data-role="page" align="center"> 
    <div data-role="content"> 
     <div id="mydatacontent" class="form"> 
      <div class="data-table-shadow" data-scroll="y" class="square single-block-view-v" style="height: 750px;"> 
       <table id="datatable" class="data-table"> 
        <tbody id="datatableContent"> 
         <!-- Table Data Here --> 
        </tbody> 
       </table> 
      </div> 
     </div> 
    </div> 
</div> 
+0

あなたはスクロールを両方向または垂直に停止したいと思っています... event.preventDefaultはスクロールを防ぐのに役立ちます – iDroid

答えて

13

あなたはtouchmoveイベントのデフォルト動作を防ぐためにtouchmoveイベントとreturn falseに特異的に結合することができます。

$(document).delegate('.ui-content', 'touchmove', false);​ 

これは、すべてのdata-role="content"要素にスクロールを無効にする必要があります。 .ui-contentセレクタを更新すると、特定のページのみでこの機能を使用する場合に、より具体的にセレクタを更新できます。ここで

は、あなたのモバイルデバイス上で試すことができますデモです:http://jsfiddle.net/RKXLH/embedded/result/

+4

スニペットの最後に*厄介な*目に見えない文字があることを知りたければ。私はそれをコピー/ペーストして演奏しても動作しませんでした。これは15分の闘争の後でしかない。 –

+0

@JoãoCunha面白い、私は何も見ていない。ページの文字セットと、エディタアプリケーションで使用している文字セットとの違いかもしれません。 – Jasper

+0

Windowsでphpstormで私に起こったことを確認できます。行を削除して手動で再入力すると、その行が修正されました。 –

14

私は上記の答えはうまく働いていることが判明しました。ただし、これは ".ui-content"の子要素のスクロールを防ぎます。 は私の代わりに

"scrollstart"

イベントを使用して子要素はまだスクロール可能です。

iOS6 webviewでテスト済みです。

var touchScroll = function(event) { 
    event.preventDefault(); 
}; 

$('element1').click(function() { 
    //this will disable the scroll 
    $(this).bind('touchmove', touchScroll); 

    $('element2').click(function() { 
     //this will enable scrolling 
     $(document).unbind('touchmove', touchScroll); 
    }); 
} 

要素1と要素2は、あなたが望むものをすることができ、そしてもちろん、クリック機能は、単にたとえば、あなたが望む任意の関数を選択することができます:私の経験で

+1

上記の方法が機能します。しかし、それを元に戻す方法はありますか?すなわち、スクロールを停止した後に再びスクロールを開始したい場合、何をすべきか? - ありがとう – Mak

+3

@Makその後、委譲されたイベントハンドラを '.undelegate()':http://api.jquery.com/undelegate/で削除してください。 '.on()'を使うと、 '.off()'を使ってイベントハンドラを削除することができます。 '.live()'は '.die()'を持っていますが、この時点で '.live()'から離れるべきです。 – Jasper

+0

@ジャスパーは同じことをしました...それは働いた! – Mak

6

あなたはこの方法を行う必要があります。

+0

それは動作します...ありがとうございます....神はあなたを祝福.... –

関連する問題