2015-10-12 9 views
9

は完全なコードは、それはChromeとFirefoxのに取り組んだが、私はiPadのAIRとiPhoneを経由して、それをチェックすると、効果はさらに「クラスC」ヒットする前に実行http://jsfiddle.net/vinex08/uhm26em1/オフセットトップが動作しないでIOS

jQuery(function ($) { 
var distance = $('.c').offset().top, 
    $window = $(window); 

$window.scroll(function() { 
    if ($window.scrollTop() >= distance) { 
     $(".b").css({ 
      position: 'fixed', 
      top: '0' 
     }); 
    } else { 
     $(".b").css({ 
      position: 'inherit', 
      top: '10' 
     }); 
    } 
}); 
});` 

ですトップ。

+0

は '位置を(使用してみてください) – Tushar

+0

まだ同じあなたが_real_ワーキングサンプルを持っていますか。同じ方法で動作するあなたのコード(JSFiddleではなく)? –

+0

:(top' http://jsfiddle.net/Lt9g39md/ –

答えて

3

私はこれが役立つことを願っています:

jQuery(function ($) { 
    var distance = $('.c').offset().top; 
    $(window).scroll(function() { 
     var wndwTop = $(this).scrollTop(); 
     if (wndwTop >= distance) { 
      $(".b").css({ 
       position: 'fixed', 
       top: '0' 
      }); 
     } else { 
      $(".b").css({ 
       position: 'inherit', 
       top: '10' 
      }); 
     } 
    }); 
}); 
+1

問題を修正した理由を説明できますか?いくつかの変数を追加する以外に、私は違いは見当たりません。 – allicarn

2

ここでは、モバイルSafariに関する既知の修正があります。 まず、ブラウザを検出します。第二に、「オフセット」機能の少しの変化挙動:

// mobile Safari reports wrong values on offset() 
// http://dev.jquery.com/ticket/6446 
if (/webkit.*mobile/i.test(navigator.userAgent)) { 
    (function($) { 
     $.fn.offsetOld = $.fn.offset; 
     $.fn.offset = function() { 
     var result = this.offsetOld(); 
     result.top -= window.scrollY; 
     result.left -= window.scrollX; 
     return result; 
     }; 
    })(jQuery); 
} 

置き、このコードのどこかにjqueryの初期化後に、しかし、あなたのオフセット計算の前に。

+0

私は、それらを使用する前にwindow.scrollYとwindow.scrollXが存在することを確認します。そうでなければ、Safariモバイル構造が将来変更された場合NaN結果を得るかもしれません。 – omerkarj

+0

とにかくこれをやりたければ、 'result.top - = window.scrollY;'を 'result.top - = window.scrollY || 0;'、 'result.left - = window.scrollX; 'と' re sult.left - = window.scrollX || 0 'となる。 – Yeti

+0

バグレポートへのリンクが更新されました:https://bugs.jquery.com/ticket/6446 – allicarn

関連する問題