2017-03-01 5 views
0

を色を変更するときに、私は、水平視差サイトを持っている、それが正常に動作しますが、私はそのようなスクロールの背景色を変更追加するとき:問題(凍結)、視差サイトにスクロール-X上

var tennis = $('.tennis'); 
var tennisDivs = {}; 
var tennisColors = {}; 
$.each(tennis, function (index, value) { 
    var color = $(value).data('color'); 
    var name = $(value).data('name'); 
    var left = $(this).offset().left; 
    if ($(value).data('name')) 
     tennisDivs[name] = left; 
     tennisColors[left] = color; 
}); 
var scrollArea = $('#tennis-container .slides'); 
var tempPosition = 'Info'; 
scrollArea.scroll(function() { 
    var position = Math.floor($('#tennis-container .slides').scrollLeft()); 
    $.each(tennisDivs, function (index, value) { 
     if ((value - 2300) <= position) { 
      currIndex = index; 
     } 
    }); 
    if (tempPosition != currIndex) { 
       tempPosition = currIndex; 
       $('.slide__bg').attr('class','slide__bg').addClass('color-' + tempPosition); 

      } 
}); 

CSS:HTML

.slide__bg { 
    transition: background-color 0.8s linear 0.3s; 
} 

.color-info, .color-stars,.basic-color { 
    background-color: #bdc1c6; 
} 

.color-courts { 
    background-color: #75695f; 
} 

<div id="tennis-container"> 
      <div class="slides"> 
       <div class="slide tennis-info info" id="tennis-info" data-name="Info" data-color="yellow"> 
        <div class="slide__bg"></div> 
        <div class="slide__content"></div> 
       </div> 



      <div class="slide ...." id="..." data-name="..." data-color="..."> 
       <div class="slide__bg"></div> 
       <div class="slide__content"></div> 
      </div> 
      <div class="slide ...." id="..." data-name="..." data-color="..."> 
       <div class="slide__bg"></div> 
       <div class="slide__content"></div> 
      </div> 

      </div> 
</div> 

問題は、スクロールの際に色の変化で、サイトが開始ここに見られるように、数秒のための停止を凍結し、スクロール:

flame chart of freezing

また、私はjQueryのanimate()を使用して背景色を変更してみたが、何も変わりません。以下のような

修正:大きな画像をリサイズ

  1. 避けてください。
  2. 背景サイズのCSSプロパティを削除します。

これは、すべてのパフォーマンスの問題についてです...私のため

+1

スクロール機能が最適化されていないため、jqueryで要素を取得するのに時間がかかりません。毎回DOMを通ることを防ぐために外部変数をクロージャーとして使用してみてください – MysterX

+0

私はこの変数を使用しています - それは - tempPositionです。色は一度だけ変更されます...今、スクロール機能のすべてのjqueryセレクタに変数を設定しましたが、何も変わりません。 –

+0

'$( '#tennis-container .slides')'の長さは何ですか? – MysterX

答えて

0

を作業しないでください。私はあなたのコードの一部についていくつかの最適化を行ってきました。これを試してみてください:

var scrollArea = $('#tennis-container .slides'); 
var tempPosition = 'Info'; 
var slideBg = $('.slide__bg'); 
scrollArea.scroll(function() { 
    var position = Math.floor(scrollArea.scrollLeft()); 
    $.each(tennisDivs, function (index, value) { 
     if ((value - 2300) <= position) { 
      currIndex = index; 
     } 
    }); 
    slideBg.attr('class','slide__bg').addClass('color-' + tempPosition); 
}); 
+0

私はこの変数を使用しています、それはです - tempPosition;色は一度だけ変更...今、私はすべてのjqueryセレクタに外部変数を設定していますスクロール機能はありますが、何も変わりません。 "(uと同じことをする) –

+0

'tempPosition'はこのコードで決して変更されないので、いくつかのアルゴリズムミスがあるかもしれませんか?スライドはどのように機能しますか?各スクロールイベントで、あなたの関数は 'slideBg'に' color-Info'クラスを追加します – MysterX

+0

Imは私のコードの一部をコピーするのを忘れました(今、私はどこに私が温度の位置を変えるか見ることができます...しかし、 8-20節を参照してください。 –

関連する問題