2012-02-21 5 views
2

私は、jquery mobile 1.0をswipejsと組み合わせて使用​​しています。ライブラリは、イメージカルーセル上でモバイルスワイプジェスチャーを可能にするために使用されています。しかし、私はAndroid 2.2.3(Motorola Droid)や他のAndroidデバイスで、選択リスト(swipejと同じページ上)がうまく動作しないという問題に遭遇しました。選択リストは表示されますが、ネイティブオプションメニューはポップアップしません。クリックするだけで何もしません。私はそれをスワイプに絞るだけでなく、スワイプ内の特定のラインにも絞ることができました。Jquery MobileとSwipe JSの非互換性により、選択リストがAndroidで動作しなくなる

style.webkitTransform = 'translate3d(' + -(index * this.width) + 'px,0,0)'; 

transalate3d CSSの動作は、jqueryモバイルセレクトリストと何らかの形で干渉しているようです。私はアンドロイド(https://github.com/jquery/jquery-mobile/issues/1051)上のjqueryモバイル選択リストの脆弱性に関する多数の報告を見つけました。そして、この動作を示すかなり簡単なサンプルページを作成することができました。私の修正は、swipejsライブラリ自体を翻訳するtranslate3dを変更することでした。しかし、translate3dの機能をよりよく理解している人、jquery mobileがどのようにしてより良い解決策を提案できるのか、これはjqmやswipejsのバグですか?

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title></title> 
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 
    <meta name="apple-mobile-web-app-capable" content="yes" /> 
    <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 
    <link rel="apple-touch-icon" href="/images/mobile/homeIcon.png" /> 
    <link rel="apple-touch-startup-image" href="/images/mobile/splash.png" /> 
    <link href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" rel="Stylesheet" type="text/css" /> 
    <script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).bind("mobileinit", function() { 
      $.mobile.ajaxEnabled = false; 
     }); 

    </script> 
    <script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js" type="text/javascript"></script> 
</head> 
<body> 
    <div data-role="page" id="main"> 
     <header data-role="header"> 
     </header> 
     <div data-role="content"> 
      <div data-role="fieldcontain"> 
       <label for="select-choice-1"> 
        Shipping method:</label> 
       <select name="select-choice-0" id="select-choice-1" data-theme="a"> 
        <option value="standard">Standard: 7 day</option> 
        <option value="rush">Rush: 3 days</option> 
        <option value="express">Express: next day</option> 
        <option value="overnight">Overnight</option> 
       </select> 
      </div> 
      <div id="divProductImagesCarousel"> 
       <ul> 
        <li><a href="image_0.jpg"> 
         <img width="250" height="250" src="image_0.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_1.jpg"> 
         <img width="250" height="250" src="image_1.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_2.jpg"> 
         <img width="250" height="250" src="image_2.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_3.jpg"> 
         <img width="250" height="250" src="image_3.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_4.jpg"> 
         <img width="250" height="250" src="image_4.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_5.jpg"> 
         <img width="250" height="250" src="image_5.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_6.jpg"> 
         <img width="250" height="250" src="image_6.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_7.jpg"> 
         <img width="250" height="250" src="image_7.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_8.jpg"> 
         <img width="250" height="250" src="image_8.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
        <li><a href="image_9.jpg"> 
         <img width="250" height="250" src="image_9.jpg" alt="Product Image" style="margin-right: 50px;" /> 
        </a></li> 
       </ul> 
      </div> 
     </div> 
    </div> 
    <script src="https://raw.github.com/bradbirdsall/Swipe/master/swipe.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var productImagesCarousel = document.getElementById('divProductImagesCarousel'); 
      window.mySwipe = new Swipe(productImagesCarousel);   
     }); 

    </script> 
</body> 
</html> 

答えて

4

jQuery Mobileを使用する場合、スワイプライブラリは必要ありません。あなたがswipeleftswiperightイベントにイベントハンドラを登録することができます。

$(document).delegate('#divProductImagesCarousel', 'swipeleft swiperight', function (event) { 
    alert('You just ' + event.type + 'ed!'); 
}); 
+1

です。このswipejsライブラリは、私にも必要なカルーセルを作成します。 – JNappi

+0

@JNappi実例、おそらくJSFiddleへのリンクを投稿できますか? – Jasper

+0

私はそれを考えて、jsfiddleの道を始めましたが、実際のアンドロイドデバイスでテストするのは難しいと感じましたので、あなたはウェブサーバー上でどこかでローカルに立ち上げることができる完全なhtmlの例がわかりました。 – JNappi

9

をはい、jQueryMobileは

を独自のスワイプ機能を持っていますが! swipeJSはとても素敵です! それでも使えます!

これは私に多くの調査を要しましたが、私にとってはうまくいくソリューションが見つかりました。

基本的には、ちょうどこのよう$(ドキュメント).ready(関数(){

内のすべてのswipejsのものを置く:

<script type="text/javascript"> 

// outside ready function so that buttons still have a var to attach function calls to like slider.next() 
var slider; 

// process AFTER jquery mobile. 
// i "think" the problem that somehow jquery mobile stops swipejs from detecting the width of the div (in the setup function) 
$(document).ready(function(){ 

    slider = new Swipe(document.getElementById('myslider'), { 
     callback: function(e, pos) { 
      // some callback code here 
     } 
    }); 

}); 
</script> 

私は、これはJSでの紛争であるとは思いません - - 。おそらく これが終わり、 でおそらく機能がそれをめちゃくちゃにされているものjquerymobile後に処理されるようにswipejsを強制

私はJSにかなり新しいので、私はこの機能がどのように異なるかを知りません。他の "これは最後にやる" pe関数。これは他の厄介な葛藤を引き起こすかもしれません。 誰かがより良い機能(理由)でコメントしたいと思うなら、それも素晴らしいでしょう。

+0

ありがとうございました<3シンプルだが効果的な解決法 – shokora

+0

jQuery Mobileサイトで 'document.ready'を使用する際の注意点:http://jquerymobile.com/demos/1.2.0/docs/api/events.html(上部の大きな黄色のボックスに気づく) – Jasper

0

jquerymobileの "pageshow"メソッドを使用する方がいいです、pageinitなどではないです。 下のコード例は、

$(document).live('pageshow', function(){ 
    //put the swipejs code here. 
} 
関連する問題