私のヘッダーにズームアウトエフェクトを、ズームインしたものをスクロールし、ズームアウトするとします。トランスフォームを使用したスクロールの振動画面:縮尺:
私が行うのは、transform:scale(1.4)でサイズを大きくし、スクロールでscrollTopとヘッダーの高さからパーセンテージを計算し、それに0.4を掛けます。問題は、スクロールで画面が振動し始めても、縮尺が滑らかではないことです。私のコードに何が間違っているのか分かりませんか?これを達成するためのベストプラクティスは何ですか?
jQuery(document).ready(function(){
function zoom_out() {
var page_header_height = jQuery('#page-header-custom').outerHeight();
var scroll_top = jQuery(window).scrollTop();
var zoom_multiplier = 0.4;
var multiplier = (zoom_multiplier*(1-((scroll_top-jQuery('#page-header-custom').offset().top)/page_header_height))) > 1 ? 1 : (zoom_multiplier*(1-((scroll_top-jQuery('#page-header-custom').offset().top)/page_header_height)));
if(multiplier <= 1) {
jQuery('#page-header-inner').stop(true, true).transition({ scale: 1/(1+multiplier), translate: '0, -50%' });
jQuery('#page-header-custom').stop(true, true).transition({
scale: 1+multiplier
});
}
}
zoom_out();
jQuery(window).on('scroll', function(){
zoom_out();
});
});
私は実際にそれを見るためにJSFiddleを作成しました。
に似window.requestAnimationFrameを使用し、これを確認してください。 https://jsfiddle.net/8vb3kof9/3/ – yjs
コードを書き直すと余分な滑らかさが得られます メモ: 'var header = jQuery( '#page-header-custom');'と 'var header_inner = jQuery( '#page-header-inner'); 'zoom_out'関数の外側です。可能であれば、 'zoom_out' fnの中でjqueryの選択を削除してください。あなたの 'page_header_height'は常に' 800px'です。頻繁な発火機能を最適化すると、滑らかさが得られます。これで十分でない場合は、[Greensock](http://greensock.com/gsap);)をご覧ください。 – sulest
['window.requestAnimationFrame()'](https:// developerを見てください。 mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame)、スクロールしてスクロールして 'scroll'イベントハンドラをスムーズにドロップします。 – LuudJacobs