使用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 相关文章推荐
javascript与CSS复习(《精通javascript》)
Jun 29 Javascript
javascript中关于执行环境的杂谈
Aug 14 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
Nov 18 Javascript
jQuery select表单提交省市区城市三级联动核心代码
Jun 09 Javascript
2014最热门的JavaScript代码高亮插件推荐
Nov 25 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
Bootstrap列表组学习使用
Feb 09 Javascript
vuex 的简单使用
Mar 22 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
May 14 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
vue route新窗口跳转页面并且携带与接收参数
Apr 10 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
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
javascript 学习之旅 (2)
2009/02/05 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python发布模块的步骤分享
2014/02/21 Python
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
python绘制圆柱体的方法
2018/07/02 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
python 实现单例模式的5种方法
2020/09/23 Python
如何通过python检查文件是否被占用
2020/12/18 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
旅游业大学生创业计划书
2014/01/31 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
护士个人总结范文
2015/02/13 职场文书
2015年质检工作总结
2015/05/04 职场文书
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技