JQ判断上下滑动

功能目标:下滑时隐藏、上划时显示底部导航栏,在页首页尾也显示底部导航栏。

原理:

scroll()滚动事件发生时,

拿当前的scrollTop和之前的scrollTop对比

如果变大了,表示向下滚动(scrollTop值变大);

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

  1. $(document).ready(function(){
  2. var p=0,t=0;
  3. $(window).scroll(function(e){
  4. p = $(this).scrollTop();
  5. if(t<=p){//下滚
  6. .......
  7. }
  8. else{//上滚
  9. .......
  10. }
  11. t = p;; //更新上一次scrollTop的值
  12. });
  13. });

个人实例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
  6. <title>JQscroll</title>
  7. <style type="text/css">
  8. *{margin: 0;padding: 0;list-style:none; box-sizing:border-box; }
  9. .navbar{width: 100%; background-color: #ACF; position:fixed; bottom:0; left:0; transition:opacity .3s ease,transform .3s ease; } /* 底部导航栏的属性及过渡属性 */
  10. .navbarhide{opacity:0; transform:translateY(100%); } /* 底部导航栏隐藏时的属性 */
  11. .content{width: 50%; margin: 0 auto; background-color: #AFC; position:relative; }
  12. .bd1,.bd2{width: 100%; height: 1px; border-bottom: 1px dotted #000; position:absolute; }
  13. .headholder{width: 50%; background-color: #F60; margin:0 auto; text-align: center; }
  14. #monitor{position:fixed; left:30%; top:50%; padding:10px; border: 1px solid #000; }
  15. </style>
  16. <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
  17. <script type="text/javascript">
  18. $(function(){
  19. function monitor(){
  20. /*var winH=$(window).height();*/
  21. var winH = window.innerHeight; //获取浏览器窗口高度,若要支持IE需要在此处做兼容
  22. var winST = $(window).scrollTop(); //获取scrollTop
  23. var docH=$(document).height(); //获取文档高度
  24. var arr=[winH,winST,docH];
  25. var winSTbefore=0; //声明一个变量,用于装触发scroll事件的上一个scrollTop
  26. $('#navbar').css('height',winH/10+'px'); //设置底部导航条高度
  27. $('#content').css({'height':winH*3}); //撑开文档高度
  28. $('.headholder').css({'height':winH/10+'px','line-height':winH/10+'px'});
  29. $('.bd1').css({'top':winH}); //分屏线
  30. $('.bd2').css({'top':winH*2}); //分屏线
  31. $('#navbar>h2').css('line-height',winH/10+'px'); //设置导航栏文字行高
  32. $('#monitor').html('<h3>winH: '+winH+'</h3><h3>winST: '+winST+'</h3><h3>docH: '+docH+'</h3>'); //滑动时显示刷新各项值
  33. return arr;
  34. }
  35. monitor();
  36. $(window).scroll(function(){ //页面滑动时
  37. var arr=monitor();
  38. var winH=arr[0]; //声明winH 浏览器窗口高度
  39. var winST = arr[1]; //声明winST scrollTop
  40. var docH = arr[2]; //声明docH 文档高度
  41. /*console.log('winST:'+winST+' winH:'+winH+' docH:'+docH+' arr: '+arr);*/
  42. if(winST<=winH/10){
  43. $('#navbar').removeClass('navbarhide'); //在首屏时显示导航条
  44. }else if(winST+winH>=docH){
  45. $('#navbar').removeClass('navbarhide'); //到达底部时显示
  46. }else if(winST>winSTbefore){
  47. $('#navbar').addClass('navbarhide'); //向下滑动时隐藏
  48. }else if(winST<winSTbefore){
  49. $('#navbar').removeClass('navbarhide'); //向上滑动时显示
  50. }
  51. winSTbefore=winST; //更新winSTbefore的值
  52. /*setTimeout(function(){winSTbefore=winST;},0)*/
  53. })
  54. })
  55. </script>
  56. </head>
  57. <body>
  58. <div id="content" class="content"> <!-- 撑开高度 -->
  59. <div class="headholder" align="center"><h2>show navbar</h2></div> <!-- 此区域内navbar展示 -->
  60. <div id="monitor"></div> <!-- 显示各项数值 -->
  61. <div class="bd1" align="center">1</div> <!-- 第一屏线 -->
  62. <div class="bd2" align="center">2</div> <!-- 第二屏线 -->
  63. </div>
  64. <div id="navbar" class="navbar" align="center" ><h2>Navbar</h2></div> <!-- 底部导航栏 -->
  65. </body>
  66. </html>
文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/174
0 评论
3.4k

发表评论

!