視差効果については、ネイティブのJavascriptで簡単なスクリプトを作成しましたが、見えない場所では失敗するようです。だから私はすでにの機能を追加したのですが、実際には役に立たないようです。非常にシンプルな視差コードにはパフォーマンスの問題があります
私の関連するコードは次のとおりです。
var $parallax, vh;
$(document).ready(function() {
$parallax = $('.parallax');
vh = $(window).height();
$parallax.parallaxInit();
});
$(window).resize(function() {
vh = $(window).height();
$parallax.parallaxInit();
});
$.fn.parallaxInit = function() {
var _ = this;
_.find('.parallax-bg')
.css('height', vh + (vh * .8));
}
//call function on scroll
$(window).scroll(function() {
window.requestAnimationFrame(parallax);
});
var parallaxElements = document.getElementsByClassName('parallax'),
parallaxLength = parallaxElements.length;
var el, scrollTop, elOffset, i;
function parallax(){
for(i = 0; i < parallaxLength; i++) {
el = parallaxElements[i];
elOffset = el.getBoundingClientRect().top;
// only change if the element is in viewport - save resources
if(elOffset < vh && elOffset + el.offsetHeight > 0) {
el.getElementsByClassName('parallax-bg')[0].style.top = -(elOffset * .8) + 'px';
}
}
}
私はそれは奇妙なことだと思うことは本当に私の知る限り、最適化されていない状態(自分の携帯電話上の)私のスクリプトよりもthis script by Hendry Sadrak実行優れています。
更新:https://jsperf.com/parallax-test
しかし、それがスクロールイベントにどのように影響しますか?これらの関数は 'ready'と' resize'でのみ呼び出され、スクロールでは呼び出されません。確かに、それらは少し遅いですが、私が経験している視差ジッタとは関係がありません。 –
ああ、それは正しいです。コードをスキップし、 'scroll'イベントの中に' $(window) 'があると思った。あなたの場合は、私はdevツールでプロファイラを設定することをお勧めします – charmeleon