zoukankan      html  css  js  c++  java
  • 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()内容相对于文档的偏移(不是浏览器窗口),所以可以理解为固定值;

  • 相关阅读:
    C++中四大强制类型转换!
    队列(queue)的实现
    栈(stack)的实现
    单向链表
    十种排序算法详解及C++实现
    extern “C”
    C语言内存分配及各种数据存储位置
    Python中的classmethod与staticmethod
    关于ORM,以及Python中SQLAlchemy的sessionmaker,scoped_session
    Python中的SQLAlchemy
  • 原文地址:https://www.cnblogs.com/keepStudying/p/6193631.html
Copyright © 2011-2022 走看看