JQ判断上下滑动

1 篇文章 0 订阅
1 篇文章 0 订阅
功能目标:下滑时隐藏、上划时显示底部导航栏,在页首页尾也显示底部导航栏。
原理:
scroll()滚动事件发生时,
拿当前的scrollTop和之前的scrollTop对比 
如果变大了,表示向下滚动(scrollTop值变大); 

如果变小了,表示向上滚动(scrollTop值变小)。 

$(document).ready(function(){  
    var p=0,t=0;  
  
    $(window).scroll(function(e){  
            p = $(this).scrollTop();  
              
            if(t<=p){//下滚  
                .......  
            }  
              
            else{//上滚  
                .......
            }  
            t = p;;   //更新上一次scrollTop的值      
    });  
});


个人实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
    <title>JQscroll</title>
    <style type="text/css">
        *{margin: 0;padding: 0;list-style:none; box-sizing:border-box; }
        .navbar{width: 100%; background-color: #ACF; position:fixed; bottom:0; left:0; transition:opacity .3s ease,transform .3s ease; }  /* 底部导航栏的属性及过渡属性 */
        .navbarhide{opacity:0; transform:translateY(100%); }  /* 底部导航栏隐藏时的属性 */
        .content{width: 50%; margin: 0 auto; background-color: #AFC; position:relative; }
        .bd1,.bd2{width: 100%; height: 1px; border-bottom: 1px dotted #000; position:absolute; }
        .headholder{width: 50%; background-color: #F60; margin:0 auto; text-align: center; }
        #monitor{position:fixed; left:30%; top:50%; padding:10px; border: 1px solid #000; }
    </style>

    <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

    <script type="text/javascript">
    $(function(){
        function monitor(){
            /*var winH=$(window).height();*/
            var winH = window.innerHeight;    //获取浏览器窗口高度,若要支持IE需要在此处做兼容
            var winST = $(window).scrollTop();  //获取scrollTop
            var docH=$(document).height();  //获取文档高度
            var arr=[winH,winST,docH];
            var winSTbefore=0;   //声明一个变量,用于装触发scroll事件的上一个scrollTop
            $('#navbar').css('height',winH/10+'px'); //设置底部导航条高度
            $('#content').css({'height':winH*3});   //撑开文档高度
            $('.headholder').css({'height':winH/10+'px','line-height':winH/10+'px'});
            $('.bd1').css({'top':winH}); //分屏线
            $('.bd2').css({'top':winH*2}); //分屏线
            $('#navbar>h2').css('line-height',winH/10+'px');    //设置导航栏文字行高
            
            $('#monitor').html('<h3>winH: '+winH+'</h3><h3>winST: '+winST+'</h3><h3>docH: '+docH+'</h3>');  //滑动时显示刷新各项值
            return arr;
        }
        monitor();

        $(window).scroll(function(){    //页面滑动时
            var arr=monitor();
            var winH=arr[0];    //声明winH 浏览器窗口高度
            var winST = arr[1];  //声明winST scrollTop
            var docH = arr[2];  //声明docH 文档高度

            /*console.log('winST:'+winST+' winH:'+winH+' docH:'+docH+' arr: '+arr);*/

            if(winST<=winH/10){
                $('#navbar').removeClass('navbarhide'); //在首屏时显示导航条
            }else if(winST+winH>=docH){
                $('#navbar').removeClass('navbarhide'); //到达底部时显示
            }else if(winST>winSTbefore){
                $('#navbar').addClass('navbarhide');    //向下滑动时隐藏
            }else if(winST<winSTbefore){
                $('#navbar').removeClass('navbarhide'); //向上滑动时显示
            }
            winSTbefore=winST;  //更新winSTbefore的值
            
            /*setTimeout(function(){winSTbefore=winST;},0)*/
        })
    })
    </script>
</head>
<body>
    <div id="content" class="content">  <!-- 撑开高度 -->
        <div class="headholder" align="center"><h2>show navbar</h2></div>   <!-- 此区域内navbar展示 -->
        <div id="monitor"></div>    <!-- 显示各项数值 -->
        <div class="bd1" align="center">1</div> <!-- 第一屏线 -->
        <div class="bd2" align="center">2</div> <!-- 第二屏线 -->
    </div>
    <div id="navbar" class="navbar" align="center" ><h2>Navbar</h2></div>   <!-- 底部导航栏 -->
</body>
</html>

点击新窗口预览


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值