2017-08-15 8 views
1

ここにリンク:wbrapist.github.io/slider/index.htmlなぜ、getComputedStyleは、ページリロード後にスライダーの幅に対して 'auto'を返しますか?

初めてページを読み込むと、getComputedStyleが有効な値を返します。しかし、単にCtrl + F5でページをリロードして、数秒間待ってからF5でリロードすれば、スライダのナビゲーションが中央の位置には表示されません。この時点で、ブラウザのコンソールを開いて、リロード(F5)後にgetComputedStyleが 'auto'値だけを返すことを確認できます。なぜこうなった?なぜ強制的にリロードした後(Ctrl + F5)、大丈夫ですか?

通知することができます:この場合、私のスライダのスライドスライドアニメーションも機能しません。 (そこすぎる)(getComputedStyleを介して値を取得)ここでは、コードのビット

をこのトラブルが

var sliderWidth  = getComputedStyle(document.getElementsByClassName('slider')[0]).width; 
 

 
function setSliderNavPosition() { 
 
    var nav = document.querySelector('.slider .navigation'); 
 
    var navWidth = parseFloat(getComputedStyle(nav).width); 
 
    var slidersWidth = parseFloat(sliderWidth); 
 

 
    nav.style.left = ((slidersWidth/2) - (navWidth/2)) + 'px'; 
 
}

を少なくともChromeとMozillaで存在します。

答えて

0

ドキュメントが完全に読み込まれていない場合は、使用することをお勧めします。それをロードするのにかかる時間に応じて、あなたの価値は異なってくるでしょう。そういうわけで、違う行動を取るのです。

はちょうどこのようなあなたのコードをラップすることにより、文書がロードされるのを待つ、この問題を解決するには、次の

window.addEventListener('load', function(){ 
    /* ...YOUR CODE GOES HERE... */ 
}); 
+0

おかげ屋! このイベントについて聞きましたが、「スクリプト」タグの「延期」属性は同じだと思いました。 –

+0

@DmitryFateevページをロードすると、2つのメインイベントが発生します:DOMが準備完了(すべてのHTMLがロードされている)しているときは、 'DOMContentLoaded'です。次に、すべての外部リソース(CSS、イメージ)がロードされると 'load'イベントが発生します。 'defer'を使用すると、最初のイベントが発生するのを待ちますが、もう1つは発生しません。あなたの場合、私はそれが問題を引き起こしていたCSSだと思います。まだロードされていませんでした。 – blex

+0

助けてくれてありがとう。 –

関連する問題