jQuery實現滾動監聽


1.設計思路
1)獲取窗口滾動高度;
2)獲取附加導航欄;
3)獲取導航欄下的所有li;
4)通過相同class獲取所有監聽元素;(此例中為jumbotron巨幕)
5)遍歷所有監聽元素,若當前元素距離文檔高度小於文檔滾動條的垂直偏移量(即滾動高度),獲取當前元素ID。(此處獲取的ID值,實際為ID值覆蓋替換,因為存在有多個元素的e當前元素距離文檔高度小於文檔滾動條的垂直偏移量的情況,但只有最后的ID是有效值,因
為前邊的會被后邊的覆覆蓋替換掉)
6)給對應的導航添加class(bootstrap中為給li添加active),先移出已有的active,然后再添加。

實現代碼
$(document).ready(function() {
//定義全局變量,獲取附加導航欄、導航列表、鏈接、各樓層、各樓層距離文檔的高度
  var menu = $("#add-nav"),
    lists = menu.find("li"),
    jumbotron = $(".jumbotron"),
    currentID;
  $(window).scroll(function() {
//獲取文檔滾動高度
	var top = $(document).scrollTop();

//遍歷樓層
	jumbotron.each(function() {
		var $this = $(this),
		    jumbotronTop =$this.offset().top;//獲取當前樓層的高度
		if (top > (jumbotronTop - 200)) {
			currentID = "#" + $this.attr("id");//每個小於top的樓層都會賦值一次,逐層覆蓋替換,最后一層才是最后的id值
		}
		else {
			return false;
		};
	})
//給相應樓層對應的附加到導航添加class
		//首先清除所有active
		var currentActive = menu.find(".active");
		if (currentID && currentActive.find("a:eq(0)").attr("href") != currentID) {
		  currentActive.removeClass("active");

		//給相應導航添加class
          menu.find("[href="+currentID+"]").parent().addClass("active");
		}
  })

});

用到的方法有:scroll()、scrollTop()、offset()、attr()、addClass()、removeClass()、find()、each()、parent()
其中重點說明:.offset()內容相對於文檔的偏移(不是瀏覽器窗口),所以可以理解為固定值;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM