使用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 相关文章推荐
jQuery中remove()方法用法实例
Dec 25 Javascript
jQuery实现两个select控件的互移操作
Dec 22 Javascript
Require.JS中的几种define定义方式示例
Jun 01 Javascript
Angular中自定义Debounce Click指令防止重复点击
Jul 26 Javascript
Vue 中对图片地址进行拼接的方法
Sep 03 Javascript
浅谈开发eslint规则
Oct 01 Javascript
使用webpack构建应用的方法步骤
Mar 04 Javascript
详解Vue项目中实现锚点定位
Apr 24 Javascript
解决layui table表单提示数据接口请求异常的问题
Sep 24 Javascript
微信小程序实现菜单左右联动
May 19 Javascript
jquery实现简单拖拽效果
Jul 20 jQuery
Vue实现简单购物车功能
Dec 13 Vue.js
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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
php email邮箱正则
2008/10/08 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
webpack打包单页面如何引用的js
2017/06/07 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Python中super函数用法实例分析
2019/03/18 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
后勤工作职责
2013/12/22 职场文书
餐饮业的创业计划书范文
2013/12/26 职场文书
趣味活动策划方案
2014/02/08 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
2014年维修工作总结
2014/11/22 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
纪录片信仰观后感
2015/06/08 职场文书