2012-03-18 11 views
1

私は写真撮影のウェブサイトをアップ配線だし、私はすべて一度、サイト上のサムネイル画像を通じてクリックすると、私は10Javascriptが正しくFirefoxのV8に画像を読み込まない - V11

を通じてFF8で不安定な動作を抱えていますしばらくの間、サムネイルの背後に表示画像がロードされるだけでなく、ページの遠くに(実際にはほとんど外に)ロードされます。

私は他のブラウザでテストしましたが、私はFireFoxでしか再現できません。それはFFや​​OS Xでより簡単に再現されますが、Windows 7のFFでも起こると言われています。

私の現在のテストです。

OS -------- ブラウザ -------- ステータス

Win7の------- IE 9 ----- --------- working
win7の-------クロム17 ----- working
win7の------- FireFoxの10 ----- possibly ok
win7の - ------ FireFox 11 ----- not working
OS X ------- Chrome 17 ----- working
OS X ------- Safari 5 ---------- working
OS X ----- - Firefoxの8 ------- not working
OSのX -------ここnot working

FireFoxの11 -----は、ステージングサイト http://captures.infinitas.ws

だとここです問題のスクリーンショット

enter image description here

問題はこれが非常に不安定で、どこで問題を探すのかわからないということです。

コードの関連するスニペットを次に示します。

Javascriptを

function centerMe(img, show, container) { 
    var img$ = $(img); 
    container = container || img$.parent(); 
    var deltaW = Math.round((container.width() - img.width)/2); 
    var deltaH = Math.round((container.height() - img.height)/2); 
    img$.css({top: deltaH, left: deltaW});  
    if (show) { 
     img$.css("visibility", "visible"); 
    } 
} 

$(document).ready(function(){ 
    var imgs = []; 
    $('a.thumb').each(function() { 
     var img = new Image(); 
     img.src = this.href; 
     imgs.push(img); 
    }).click(function() { 
     var container = $("#gallery > div"); 
     var oldImg = container.find("img"); 

     var img = new Image(); 
     img.src = this.href; 
     var newImg = $(img).hide(); 
     container.append(img); 
     centerMe(img, false, container); 

     oldImg.stop(true).fadeOut(500, function() { 
      $(this).remove(); 
     }); 
     newImg.fadeIn(500); 
     return false; 
    }); 
});​ 

スタイルシート

#content 
{ 
    position: relative; 
    width: 1160px; 
} 

#gallery 
{ 
    position: absolute; 
    width: 1160px; 
} 

#gallery > div 
{ 
    position: relative; 
    width: 800px; 
    height: 600px; 
    text-align:center; 
    vertical-align:middle; 
} 

#gallery > div > img 
{ 
    position: absolute; 
} 

/*Gallery Navigation*/ 
#gallery > ul 
{ 
    position: absolute; 
    display: inline-block; 
    margin: 0; 
    padding: 0; 
    list-style-type: none; 
    vertical-align: top; 
    width: 320px; 
    top: 0;right: 0; 
} 

#gallery > ul > li 
{ 
    list-style-type: none; 
    display: inline-block; 
    vertical-align: top; 
    letter-spacing: normal; 
    padding-top: 3px; 
} 

HTML

<div id="gallery"> 
     <div> 
      <img src="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-nTz8mLX/0/L/CAP0029-L.jpg" 
       onload="centerMe(this, true)" style="visibility: hidden" /> 
      <noscript> 
       <img src="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-nTz8mLX/0/L/CAP0029-L.jpg" /> 
      </noscript> 
     </div> 
     <ul> 
      <li><a class="thumb" href="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-nTz8mLX/0/L/CAP0029-L.jpg" 
       target="_blank"> 
       <img src="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-nTz8mLX/0/Ti/CAP0029-Ti.jpg" /></a></li> 
      <li><a class="thumb" href="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-Hp2qmZC/0/L/CAP0284-copy-L.jpg" 
       target="_blank"> 
       <img src="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-Hp2qmZC/0/Ti/CAP0284-copy-Ti.jpg" /></a></li> 
      <li><a class="thumb" href="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-qG9wB77/0/L/CAP0167-L.jpg" 
       target="_blank"> 
       <img src="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-qG9wB77/0/Ti/CAP0167-Ti.jpg" /></a></li> 
      <li><a class="thumb" href="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-ZxNk2zh/0/L/CAP0097-L.jpg" 
       target="_blank"> 
       <img src="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-ZxNk2zh/0/Ti/CAP0097-Ti.jpg" /></a></li> 
      <li><a class="thumb" href="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-j6tmqHJ/0/L/amanda-005-L.jpg" 
       target="_blank"> 
       <img src="http://captures.smugmug.com/Portfolio/Weddings-Couples/i-j6tmqHJ/0/Ti/amanda-005-Ti.jpg" /></a></li> 
     </ul> 
    </div> 

私は質問を実現長いことですが、なぜこれが起こっているのかについて誰かが助言を与えることができれば、私はあなたの考えを聞きたいです。

+0

"ready"ハンドラの代わりに '$(document).load()'ハンドラで初期化を行うとどうなりますか?すべての画像(など)がロードされるまで、「ロード」イベントは発生しません。 – Pointy

+0

@Pointy '.ready'を' .load'に変更すると、イメージはスワップしません。彼らはちょうど新しいブラウザウィンドウに読み込まれます。 –

+0

@ChaseFlorell - '$(document).load()'ではなく '$(window).load()'でしたが、とにかくそれが問題であると疑うことがあります。 – jfriend00

答えて

1

イメージに.srcを設定していて、直ちにその寸法(centerMe)を読み取ろうとしています。 Firefoxが実装している現在のHTML5仕様テキストに従って、サイズはsrcセットから非同期に更新されます。イメージのロードイベントからサイズに依存するものを処理すると効果があります。

スペックがウェブと互換性がないと思われる問題があります。また、他のブラウザと同じように動作が変更されたhttps://ftp.mozilla.org/pub/mozilla.org/firefox/try-builds/[email protected]/try-macosx64/にいくつかの開発用Firefoxビルドがあります。あなたのサイトの人たちが問題を解決しているかどうかを調べる価値があります。

+0

ありがとう。私はimg onloadアプローチを試みるかもしれません。 –

+0

hrm。私は 'ready'節で' newImg.fadeIn(500);に至るまで 'centerMe(img、false、container);をラップしようとしました...' $(img)ready(function(){.. 。}); '成功なし。 –

+0

もしかしたらそれをもう少し読んでいればいいですか。これは '$(img).load(function(){' –

0

Firefoxがドキュメントの読み込みを待たずに、イベントハンドラが正しく接続されていないようです。私はFirefoxで実際のコードを見てみると

、私はこれを参照してください。

$(document).load() 

それがあるべきとき:site.jsの終わり近く

$(document).ready() 

また、このコードは多少最小化されているように見えます(すべてのインデントが削除され、多くの変数の名前が変更されます)。最小化する前にアプリをデバッグすることをお勧めします。最小化するとデバッグするのがずっと難しくなります。それがすべてのところで適切に機能するときは、それを最小限に抑えてもう一度テストすることができます。

+0

@ Pointyの理論をテストするために.loadのための.readyをスワップアウトしました。私はそれ以来それを戻しました。 –

+0

それは私にとっては非効率的でした。私はあなたが試していた一時的なものをデバッグしていました。 '.load()'を使うつもりなら、 '$(document).load()'ではなく '$(window).load()'になります。だから、私はもう一度試してデバッグして欲しいですか? – jfriend00

+0

@ChaseFlorell - あなたのページは現在壊れており、どのブラウザーでも動作しません。今すぐデバッグできません。 – jfriend00

関連する問題