在瀏覽一些網站時發現有一種效果是當滾動時看到某一DIV的背景也會隨之滾動,如下:

當滾動時內容位置保持不變,但是內容后面的背景卻在隨着滾動。隨之我通過審查元素看到了其是通過background-position來實現的,實現原理為當目標DIV出現在屏幕上時,當往下滾動時background-position的Y越來越小,反之則越大。
准備好一張大圖,先寫出布局
<style>
.wrap{width: 100%;height: 3000px;}
.wrap_bg{background: url(images/scroll_bg.jpg) no-repeat;background-position: center -300px;width: 100%;height: 600px;overflow: hidden;}
.content{width: 100%;height: 100px;text-align: center;color: #fff;font-size: 100px;margin-top: 100px;}
</style>
<div class="wrap">
<div class="wrap_bg">
<div class="content">
內容
</div>
</div>
</div>
使用scroll()方法實現最終效果
var winHeight = $(window).height();//窗口高
var divHeight = $('.wrap_bg').height();//div高
var divTop = $('.wrap_bg').offset().top;//div距離html頂部高度
var prevtop = divTop;
$(window).on('scroll',function(){
var winTop = $(window).scrollTop();//滾動條滾動高度
if(winTop+winHeight>divTop && winTop<divTop+divHeight){//判斷div是否出現在屏幕
if(winTop>=prevtop){//滾動條往下
$('.wrap_bg').finish().animate({
backgroundPositionY:'-=10px'
},100);
}else{//滾動條往上
$('.wrap_bg').finish().animate({
backgroundPositionY:'+=10px'
},100);
}
prevtop = $(window).scrollTop();
}
})
