據我所知,你想要的東西是這樣的:當一個元素進入視口區域時,它會消失,當它從視口區域出來時,它應該淡出。
所以所有的事情都應該在窗口的onscroll
事件中完成。要知道元素是否進出視口區域,我們需要知道其中的top
和bottom
(可以從其top
及其height
中計算),我們還需要了解視區的高度。這就是我們需要查明某個元素是處於視口區域還是視區外的情況。以下是詳細的代碼。注意:爲了簡單起見,我沒有在這裏提到視口高度的複雜性(我只是使用document.documentElement.clientHeight
- 這應該適用於所有現代瀏覽器的最新版本)。
HTML:
<div class="fading"></div>
<div class="fading"></div>
<div class="fading"></div>
<div class="fading"></div>
CSS:
.fading {
border:1px solid red;
margin-bottom:10px;
height:500px;
background:green;
}
JS:
var fadings = $(".fading");
$(window).scroll(function(){
//the viewport's height
var vpheight = document.documentElement.clientHeight;
//loop through all interested elements
fadings.each(function(){
//get the rect of the current element
var r = this.getBoundingClientRect();
//the current element's height
var thisHeight = $(this).height();
//check if the element is completely out of the viewport area
//to just ignore it (save some computation)
if(thisHeight + r.top < 0 || r.top > vpheight) return true;
//calculate the opacity for partially visible/hidden element
var opacity = Math.max(0, Math.min(1,
(r.top >= 0 ? vpheight - r.top : thisHeight - Math.abs(r.top))/vpheight));
//set the opacity
$(this).css("opacity", opacity);
});
});
Demo
由於頂部和底部的是類,不能你只是重複利用那些通過您的頁面,但是,不同的元素? –
此外,它看起來像你可能可以將這些組合到同一個窗口滾動事件中,所以只需從上面的示例中刪除第3行和第4行。 –
@LeeWise不,我不能。因爲它只是一個滾動事件,其他部分只會在開始滾動時淡入淡出(在其他部分的下面),但我試圖實現的是它們在頂部淡出並淡入底部(如在小提琴中答案如下)。是的,我知道我可以結合這兩個功能:) –