使用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在IE和FF下attachEvent,addEventListener学习笔记
Nov 26 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 Javascript
情人节之礼 js项链效果
Feb 13 Javascript
使用javascript实现Iframe自适应高度
Dec 24 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
JavaScript判断是否是微信浏览器
Jun 13 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
Jul 07 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
Jun 27 Javascript
谈谈vue中mixin的一点理解
Dec 12 Javascript
在JavaScript中实现链式调用的实现
Dec 24 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 Javascript
Node.js API详解之 repl模块用法实例分析
May 25 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
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP生成树的方法
2015/07/28 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python友情链接检查方法
2015/07/08 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
工作时间上网检讨书
2014/02/03 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
团日活动总结怎么写
2014/06/25 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
简易离婚协议书范本
2014/10/24 职场文书
党校学习个人总结
2015/02/15 职场文书
新员工入职感言范文!
2019/07/04 职场文书
Python序列化与反序列化相关知识总结
2021/06/08 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle