私のクライアントは、発信記事を現在のスクロール位置に残し、新しい記事を一番上に表示する記事スクローラーを必要としています。
CSS3 トランジションを使用してこれを達成しました。送信記事の上マージンを現在の $(window).scrollTop() 値に等しい負の値に設定し、$(window).scrollTop(0) を使用してページを一番上までスクロールします。 )。スライドが完成したら、送信記事の上余白をゼロにリセットし、次のトランジションに備えます。簡単な例をhttp://www.siblify.com/stackslider/にアップロードしましたが、「次の」クリックスクロールを具体的に管理するコードは次のとおりです。
#container {
height:auto;
width:800px;
position:relative;
overflow:hidden;
margin:0 auto;
padding:60px 0 20px;
}
.slidePanel {
position:absolute;
left:0;
top:0;
width:760px;
z-index:900;
background:grey;
-webkit-transition:left .5s ease-in-out;
-moz-transition:left .5s ease-in-out;
-o-transition:left .5s ease-in-out;
padding:60px 20px 20px;
}
.prevPanel {
left:-800px;
}
.currentPanel {
z-index:1000;
display:block;
}
.nextPanel {
left:800px;
}
div.sliding {
left:0;
}
div.slidingOffLeft {
left:-840px;
}
div.slidingOffRight {
left:840px;
}
<div id="controls">
<a href="prev">Prev</a> <a href="next">Next</a>
</div>
<div id="container">
<div class="prevPanel slidePanel">
<!-- content here -->
</div>
<div class="currentPanel slidePanel">
<!-- content here -->
</div>
<div class="nextPanel slidePanel">
<!-- content here -->
</div>
</div>
$('a[href="next"]').click(function(i) {
i.preventDefault();
$('.prevPanel').remove();
$('.currentPanel').css({
"margin-top": "-" + $(window).scrollTop() + "px"
});
$(window).scrollTop(0);
$('.currentPanel').addClass('slidingOffLeft').delay(500).removeClass('slidingOffLeft currentPanel').addClass('prevPanel');
$('.nextPanel').addClass('sliding').delay(500).removeClass('sliding nextPanel').addClass('currentPanel');
setTimeout(function() {
$('#container').height($('.currentPanel').height());
$('.prevPanel').css({
'margin-top': '0px'
});
}, 500)
})
このメソッドはデスクトップ ブラウザーでは完全に機能しますが、iPad では負のマージンと $(window).scrollTop(0) の追加がすぐには行われないため、記事が引き戻される前にウィンドウが一番上にスクロールするときにわずかなブリップが表示されます。位置に上げます。
これら 2 つのイベントを iOS で同時に発生させる方法や、パフォーマンスを向上させる別の方法についてアドバイスをいただければ幸いです。
注:私の例では、「前へ」ボタンと「次へ」ボタンをクリックするとページがジャンプします。これは既知の iOS 固定位置バグですが、最終バージョンはジェスチャー制御になるため、このプロジェクトでは問題になりません。