转载

jquery判断页面滚动条(scroll)是上滚还是下滚,且是否滚动到头部或者底部

webtouch(webapp)页面,防苹果手机safari浏览器,网上滑动,底部导航消失,滑动到底部又出现。向下滑动,底部导航出现。

遇到问题

1、我一开始用swipeup和swipedown来做,发现因为有滚动条,不会触发。因此只能判断滚动条是上滚下滚等。关于手机手势,后面的文章会介绍,欢迎关注!

2、通过上滚下滚来让底部导航显示或者因此,安卓上面的浏览器都可以,但是苹果safari会一闪一闪,原因是苹果safari自动有个弹跳效果,导致事件重复执行,解决办法是给上滚下滚一个距离,滚动到一定距离后返回是上滚还是下滚。

单纯判断滚动条方向

function scroll( fn ) {  var beforeScrollTop = document.body.scrollTop,   fn = fn || function() {};  window.addEventListener("scroll", function() {   var afterScrollTop = document.body.scrollTop,    delta = afterScrollTop - beforeScrollTop;   if( delta === 0 ) return false;   fn( delta > 0 ? "down" : "up" );   beforeScrollTop = afterScrollTop;  }, false); } 

调用方法:

scroll(function(direction) { console.log(direction) });

以上方法手机苹果浏览器事件会跳动,解决方法及代码改进

scrollDirect: function (fn) {  var beforeScrollTop = document.body.scrollTop;  fn = fn || function () {  };  window.addEventListener("scroll", function (event) {   event = event || window.event;   var afterScrollTop = document.body.scrollTop;   delta = afterScrollTop - beforeScrollTop;   beforeScrollTop = afterScrollTop;   var scrollTop = $(this).scrollTop();   var scrollHeight = $(document).height();   var windowHeight = $(this).height();   if (scrollTop + windowHeight > scrollHeight - 10) {  //滚动到底部执行事件    fn('up');    return;   }   if (afterScrollTop < 10 || afterScrollTop > $(document.body).height - 10) {    fn('up');   } else {    if (Math.abs(delta) < 10) {     return false;    }    fn(delta > 0 ? "down" : "up");   }  }, false); } 

调用方法:

var upflag=1;    var  downflag= 1;  //scroll滑动,上滑和下滑只执行一次! scrollDirect(function (direction) {   if (direction == "down") {    if (downflag) {     $(".footer_wrap").slideUp(200);     downflag = 0;       upflag = 1;    }   }   if (direction == "up") {    if (upflag) {     $(".footer_wrap").slideDown(200);       downflag = 1;     upflag = 0;    }   }  }); 

滚动条滚动到底部和头部判断

其实我上面的函数中已经有判断,下面再列一下!看如下函数!

BottomJumpPage: function () {  var scrollTop = $(this).scrollTop();  var scrollHeight = $(document).height();  var windowHeight = $(this).height();  if (scrollTop + windowHeight == scrollHeight) {  //滚动到底部执行事件          console.dir("我到底部了");  }  if (scrollTop == 0) {  //滚动到头部部执行事件  console.dir("我到头部了");  } } 

调用方法:

$(window).scroll(BottomJumpPage);

关于是否滚动到页面底部和头部,相关的文章还有 http://www.haorooms.com/post/js_jquery_height

理解了这篇文章,是否滚动轴滚到底部和头部就迎刃而解了!

原文: http://www.haorooms.com/post/jquery_scroll_upanddown

justcode.ikeepstuding.com

正文到此结束
Loading...