これらの行に何かが役立つ場合があります。
htmlについては、80pxの高さで100divのテキストを作成し、25dpiの80pxのコールを背景色と下端の境界線で作成しました。スクロール速度の違いを確認できます。私はそれらを生成するためにカミソリとc#mvcを使用しましたが、あなたはそれらのdivを作成したいと思っても問題ありません。
<div id="container">
<div class="fast">
@for (var i = 1; i <= 100; i++)
{
<div>@i. This is row @i</div>
}
</div>
<div class="slow">
@for (var j = 0; j < 25; j++)
{
var r = 255 - j;
var g = 127 + (int)(.5 * j);
var b = 10 + j;
<div class="color" style="background-color:rgb(@r, @g, @b)"></div>
}
</div>
</div>
私はscssを使用しますが、必要に応じてCSSを作成することもできます。
#container {
height: 700px;
width: 250px;
overflow-y: hidden;
position: relative;
.fast {
position: absolute;
top: 0;
div {
height: 80px;
width: 100%;
}
}
.slow {
width:100%;
position: absolute;
top: 0;
div {
height: 80px;
width: 100%;
opacity: .3;
border-bottom:1px dotted white;
}
}
}
そして、いやジャバスクリプト:
var isAnimating = false;
$(document).ready(function()
{
$('#container').on('DOMMouseScroll mousewheel', function (e)
{
if (!isAnimating)
{
isAnimating = true;
e.preventDefault();
var delta = e.originalEvent.wheelDeltaY;
var $this = $(this);
console.log(delta);
var newFast = parseInt($this.find('.fast').css('top'), 10) + delta;
var newSlow = parseInt($this.find('.slow').css('top'), 10) + delta/4;
if (newFast > 0)
newFast = 0;
if (newSlow > 0)
newSlow = 0;
console.log(newFast + " | " + newSlow);
$this.find('.fast').animate({ top: newFast + 'px' }, 100);
$this.find('.slow').animate({ top: newSlow + 'px' }, 100, function() { isAnimating = false; });
}
});
});
注:こののみ取り扱うマウスホイールのスクロール、スクロールバーをドラッグしていません。実際には、スクロールするdivを作成しませんでしたので、表示されるすべてのスクロールはホイールからのものです。 .scroll(...)
イベントも作成することができますが、それらは1つのブラウザから次のブラウザに非常に厄介な傾向があります。これでもいくらか不快感があります。スクロールイベントを嫌うのは難しいことです。
フィードにCSSルールを設定して、その上にトランジションを付けると、変更がアニメーション化されることがありますか?それ以外にも、スクロールイベントが多く発生すると、あなたのロジックを調整/デバウンスすることを検討する必要があります。また、そのような効果を得るためには、スクロールイベントでdomルックアップを実行したくない場合、パフォーマンスが低下するため、パフォーマンスが低下する可能性があります。ロジックをIIFEに入れ、スコープをルックアップしてハンドラ内でそれらのルックアップを使用します。 – Taplar
異なるブラウザがスクロールイベントを別々に処理します。そのイベントをこの方法で使用すると、いくつかの狂った結果が出ます。可能であれば、あなたのすべてのスタイリングをCSSではなく、JavaScriptのままにしてください。 – nurdyguy
ありがとう、大変感謝しています。これは私が常にこのような機能を扱ってきた方法です。あなたのロジックの調整/デバウンスの例を教えてください。 @タプラ –