使用jQuery判断浏览器滚动条位置的方法


Posted in Javascript onMay 30, 2016

项目背景

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);

判断div是否滚动到底部

上面的方法是判断滚动轴是否滚动到底部,但是有时候,我们在做滚动加载的时候,有时候也要做某个div是否滚动到底部然后加载。那么如何判断DIV的滚动轴滚动到底部呢?

这个也需要了解几个高度:

1、div的高度 $("#某div").height();
2、滚动轴的高度 $(#某div)[0].scrollHeight
3、滚动轴到div顶部的高度 $(某div)[0].scrollTop;
书写代码如下:

$(document).ready(function (){
    var nScrollHight = 0; //滚动距离总长(注意不是滚动条的长度)
    var nScrollTop = 0;  //滚动到的当前位置
    var nDivHight = $("#div1").height();
    $("#div1").scroll(function(){
     nScrollHight = $(this)[0].scrollHeight;
     nScrollTop = $(this)[0].scrollTop;
     if(nScrollTop + nDivHight >= nScrollHight)
      alert("滚动条到底部了");
     });
});

PS:jQuery滚动条位置控制:

将div的滚动条滚动到其子元素所在的位置,方便自动定位。

var container = $('div'), 

scrollTo = $('#row_8');


container.scrollTop( 

scrollTo.offset().top - container.offset().top + container.scrollTop() 

);


// Or you can animate the scrolling: 

container.animate({ 

scrollTop: scrollTo.offset().top - container.offset().top + container.scrollTop() 

});?

 

Javascript 相关文章推荐
js 实现打印网页中定义的部分内容的代码
Apr 01 Javascript
14个有用的Jquery技巧分享
Jan 08 Javascript
javascript去除字符串左右两端的空格
Feb 05 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
Apr 17 Javascript
javascript检测两个数组是否相似
May 19 Javascript
详解JavaScript操作HTML DOM的基本方式
Oct 21 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
Feb 16 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
Jun 12 Javascript
vue中各组件之间传递数据的方法示例
Jul 27 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
解决Layui 表格自适应高度的问题
Nov 15 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 Javascript
JS检测移动端横竖屏的代码
May 30 #Javascript
BootStrap中Tab页签切换实例代码
May 30 #Javascript
js小数计算小数点后显示多位小数的实现方法
May 30 #Javascript
拥Bootstrap入怀——导航栏篇
May 30 #Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 #Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 #Javascript
Bootstrap编写导航栏和登陆框
May 30 #Javascript
You might like
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
将Python代码打包为jar软件的简单方法
2015/08/04 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
用Python实现数据的透视表的方法
2018/11/16 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
美国时尚女装在线:Missguided
2016/12/03 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
土木工程师岗位职责
2013/11/24 职场文书
初中化学教学反思
2014/01/23 职场文书
公司员工活动策划方案
2014/08/20 职场文书
辩论会主持词
2015/07/03 职场文书
活动宣传稿范文
2015/07/23 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技