パララックスサイトを開発していて、スクロールが止まったときに要素を緩和したい。そこで、スクロールが停止したことを検出するプラグインを開発し、停止したら、要素の動きを滑らかにします (オブジェクトは、ユーザーがスクロールしていた方向に 5 ピクセル移動します)。機能しますが、プラグインが適用された最後の要素に対してのみです。デバッグしようとしたとき、両方の要素がまだ内部で有効であること$(window).scroll(function(event) {
がわかりましたが、到達$(window).scrollStopped(function(){
すると最後の要素のみが有効です。解決策はありますか?
// Scroll Direction set
var lastScrollTop = 0, scrollDirection = "";
$(window).scroll(function(event){
var st = $(this).scrollTop();
if (st > lastScrollTop){
scrollDirection = "down";
} else {
scrollDirection = "up";
}
lastScrollTop = st;
});
// Scroll Stopped detection
$.fn.scrollStopped = function(callback) {
$(this).scroll(function(){
var self = this, $this = $(self);
if ($this.data('scrollTimeout')) {
clearTimeout($this.data('scrollTimeout'));
}
$this.data('scrollTimeout', setTimeout(callback,250,self));
});
};
// Smooth ending
$.fn.smoothStop = function () {
var $this = $(this);
$(window).scroll(function(event) {
$(window).scrollStopped(function(){
var top = parseFloat($this.css("top"));
if(scrollDirection == "down")
{
console.log(top, $this);
var new_top = top + 5;
$this.animate({
top: new_top + 'px'},
1000);
}
else{
var new_top = top - 5;
$this.animate({
top: new_top + 'px'},
1000);
}
});
});
};
$(".g6").smoothStop();
$(".g2").smoothStop();