js和jquery实现页面滚动监听

js和jquery实现页面滚动监听

一、总结

一句话总结:onscroll方法和监听页面元素的高度都可以实现滚动监听。

 

1、onscroll方法实现滚动监听的核心代码是什么?

    <body onscroll="scroll()">

 

2、通过检测元素的高度实现滚动监听?

//遍历楼层
    jumbotron.each(function() {
        var $this = $(this),
            jumbotronTop =$this.offset().top;//获取当前楼层的高度
        if (top > (jumbotronTop - 200)) {
            currentID = "#" + $this.attr("id");//每个小于top的楼层都会赋值一次,逐层覆盖替换,最后一层才是最后的id值
        }
        else {
            return false;
        };
    })

 

 

 

二、onscroll方法实现滚动监听

js监听html页面的上下滚动事件

最近在一个项目中,在写前端页面的时候,想像以前做Android时在页面时刻监听上下滚动的事件,查找资料发现由鼠标或类似用户动作触发的事件有以下图示:

 

不多说了,直接上代码了,经过测试可以使用:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Dome</title>
        <script type="text/javascript">  

            function scroll(){
                //console.log("打印log日志");实时看下效果
                console.log("开始滚动!");
            }

            var scrollFunc = function (e) {  
                e = e || window.event;  
                if (e.wheelDelta) {  //第一步:先判断浏览器IE,谷歌滑轮事件               
                    if (e.wheelDelta > 0) { //当滑轮向上滚动时  
                        console.log("滑轮向上滚动");  
                    }  
                    if (e.wheelDelta < 0) { //当滑轮向下滚动时  
                        console.log("滑轮向下滚动");  
                    }  
                } else if (e.detail) {  //Firefox滑轮事件  
                    if (e.detail> 0) { //当滑轮向上滚动时  
                        console.log("滑轮向上滚动");  
                    }  
                    if (e.detail< 0) { //当滑轮向下滚动时  
                        console.log("滑轮向下滚动");  
                    }  
                }  
            }
            //给页面绑定滑轮滚动事件  
            if (document.addEventListener) {//firefox  
                document.addEventListener('DOMMouseScroll', scrollFunc, false);  
            }  
            //滚动滑轮触发scrollFunc方法  //ie 谷歌  
            window.onmousewheel = document.onmousewheel = scrollFunc;



        </script>  

    </head>
    <body onscroll="scroll()">
        <div style="height: 2000px;background-color: aqua;"></div>
    </body>
</html>

如果有没有使用过console.log(“”)的,我这里截下图看下吧(谷歌浏览器):

 

 

 

三、通过检测元素的高度实现滚动监听

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

 

 

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/9267710.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值