移动端的弹窗内容有滚动条,滚动到底部或顶部时或影响弹窗下的body滚动,某些浏览器滚动到顶部时不松手就触发了刷新页面的情况,如果不需要这样的默认体验,就需要加一下判断了。

var startX,startY,endX,endY,distanceX,distanceY;//判断容器的滑动方向
//判断元素滑到底部时阻止滑动body,使用时传入局部滚动的选择器即可
function smartScroll(ele){
$(ele).on("touchstart", function (e) {
startX = e.originalEvent.changedTouches[].pageX;
startY = e.originalEvent.changedTouches[].pageY;
}); $(ele).on("touchmove", function (e) {
//获取滑动屏幕时的X,Y
endX = e.originalEvent.changedTouches[].pageX;
endY = e.originalEvent.changedTouches[].pageY;
//获取滑动距离
distanceX = endX - startX;
distanceY = endY - startY;
var scrollHeight = this.scrollHeight;
var height = this.offsetHeight;
var scrollTop = this.scrollTop; //判断滑动方向
if (Math.abs(distanceX) > Math.abs(distanceY) && distanceX > ) {
//layer.msg('往右滑动');
} else if (Math.abs(distanceX) > Math.abs(distanceY) && distanceX < ) {
//layer.msg('往左滑动');
} else
if (Math.abs(distanceX) < Math.abs(distanceY) && distanceY < ) {
//layer.msg('往上滑动');
if(scrollHeight - height == scrollTop){
//layer.msg("bottom")
event.preventDefault();
return;
}else{
e.stopPropagation();
}
} else if (Math.abs(distanceX) < Math.abs(distanceY) && distanceY > ) {
//layer.msg('往下滑动');
if(this.scrollTop == ){
//layer.msg("top")
event.preventDefault();
return;
}else{
e.stopPropagation();
}
}
})
}

另外有种情况就是layer这样的弹出层占100%高度的,当layer滚动到底部时会影响下面的body滚动,需要在layer弹框时记住之前body的滚动位置,关闭layer弹窗时再恢复原来的高度

 var scrollTop = ;
function disabledBakePage(arg){
$("#top_header2 a.back_a").addClass("prevent-none");
if(arg){
scrollTop = ;
}else{
scrollTop = getScrollTop();//记住当前的位置
}
$("body").addClass("no-scroll");
$(window).scrollTop();//解决浏览器地址栏遮住绝对定位或固定定位弹窗顶部的问题
$("#patient_list_wrap").addClass("opacity-0"); }
function abledBakePage(){
$("body").removeClass("no-scroll");
$(window).scrollTop(scrollTop);//恢复原来的位置
$("#patient_list_wrap").removeClass("opacity-0")
setTimeout(function(){
$("#top_header2 a.back_a").removeClass("prevent-none")
},) }
function getScrollTop(){
var scrollTop = window.pageYOffset
|| document.documentElement.scrollTop
|| document.body.scrollTop
|| ;
return scrollTop;
} //*********以下是获取键盘弹起时窗口的高度,可以供参考***********
// 通过键盘弹起事件获取
$("document").on('keyup', function (e) {
layer.msg(e.height)
})
// 键盘收起事件
$("document").on('keydown', function (e) {
layer.msg(e.height) //
})
function showHeight(){
var bodyClientHeight = document.body.clientHeight //==> BODY对象高度
var documentElementClientHeight = document.documentElement.clientHeight //==> 可见区域高度
var bodyClientHeight = document.body.clientHeight //==> 网页可见区域高
var offsetHeight = document.body.offsetHeight //==> 网页可见区域高(包括边线的高)
var bodyScrollHeight = document.body.scrollHeight //==> 网页正文全文高
var bodyScrollTop = document.body.scrollTop //==> 网页被卷去的高
var screenTop = window.screenTop //==> 网页正文部分上
var screenHeight = window.screen.height //==> 屏幕分辨率的高
var screenAvailHeight = window.screen.availHeight //==> 屏幕可用工作区高度
var info = '<p>bodyClientHeight:&nbsp;'+bodyClientHeight+'</p><p>documentElementClientHeight:&nbsp;'+documentElementClientHeight+'</p><p>bodyClientHeight:&nbsp;'+bodyClientHeight+'</p><p>offsetHeight:&nbsp;'+offsetHeight+'</p><p>bodyScrollHeight:&nbsp;'+bodyScrollHeight+'</p><p>bodyScrollTop:&nbsp;'+bodyScrollTop+'</p><p>screenTop:&nbsp;'+screenTop+'</p><p>screenHeight:&nbsp;'+screenHeight+'</p><p>screenAvailHeight:&nbsp;'+screenAvailHeight+'</p>';
layer.msg(info, {
icon: ,
time: //2秒关闭(如果不配置,默认是3秒)
}, function(){
//do something
});
}

元素滚动到底部或顶部时阻止body滚动的更多相关文章

  1. 利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动

    查看本章节 查看作业目录 需求说明: 利用自定义动画 animate() 方法,实现某图书网站中"近 7 日畅销榜"中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠 ...

  2. android ListView滚动条监听判断滚动到底部还是顶部

    代码: lv.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView vie ...

  3. Android 控制ScrollView滚动到底部或顶部

    在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等, 这里有两种办法,第一种,使用scrollTo(): public static void scrollToBottom ...

  4. Android为TV端助力 电影栏目移动到底部或者顶部时抖动动画

    1 移动到底部上下抖动ObjectAnimator animatorX = ObjectAnimator.ofFloat(holder.itemView,"translationX" ...

  5. ListView数据更新后,自动滚动到底部(聊天时常用)| Listview Scroll to the end of the list after updating the list

    转:http://www.cnblogs.com/bjshsqlt/p/3311830.html If you would like to after you have updated by list ...

  6. 滑动到底部或顶部响应的ScrollView实现

    关于使用可见:滚动到底部或顶部响应的ScrollView使用 示例APK可从这些地址下载:Google Play,  360手机助手,  百度手机助手,  小米应用商店,  豌豆荚 两种实现方式的主要 ...

  7. web自动化,下拉滚动到底部/顶部和下拉滚动到指定的元素

    在web自动化,经常会遇到页面显示内容太多的时候,页面就会出现滚动条,一般有两种方式进行下拉,一种是直接下拉到底部/顶部/中部,或者直接给定元素,直接下拉到指定元素的位置. 两种方式的共同点: 两种方 ...

  8. 记一次包含iframe的需要滚动的元素不能滚动到底部的问题

    一个包含上头部.下部模块(包含左右两边模块:侧边栏.内容区域)的页面 前提条件,内容区域: 1.元素高度需要自适应屏幕高度 2.里面内容足够长时,可以滚动 3.包含了一个iframe嵌入的内容很长的页 ...

  9. 滚动页面时DIV到达顶部时固定在顶部

    本示例使用Javascript实现了滚动页面时,DIV到达顶部时固定在顶部.在IE下效果有点闪,效果网址:http://www.keleyi.com/keleyi/phtml/fixdiv.htm 下 ...

随机推荐

  1. MySQL配置说明

    以下内容,来源于http://www.jb51.net/article/48082.htm [client] port = 3306 socket = /tmp/mysql.sock [mysqld] ...

  2. Scientific Toolworks Understand

    Scientific Toolworks Understand是一款定位于代码阅读的软件.界面用Qt开发的. 软件特性: 1.支持多语言:Ada, C, C++, C#, Java, FORTRAN, ...

  3. nodejs process.memoryUsage() rss等参数啥含义

    1 前言 使用process.memoryUsage() ,然后可以得到一个对象如下: { rss: 4935680, heapTotal: 1826816, heapUsed: 650472, ex ...

  4. 安装python的pip模块

    安装python的pip模块 网址https://pypi.python.org/pypi/pip 选择,点击下载 将文件解压到C:\Users\Administrator\AppData\Local ...

  5. python 面向对象编程(高级篇)

    飞机票 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对 ...

  6. 不能够连接到主机(名称为localhost)上的MySQL服务”

    不能够连接到主机(名称为localhost)上的MySQL服务” -如果是服务未启动.那么就右键‘计算机’---->管理--->服务和应用程序---->服务,在右侧的栏目中找到名称为 ...

  7. log4j 知识点

    什么是log4j? log4j 是一个帮助程序员将日志语句输出到各种输出目标的工具. log4j 包的设计使得日志语句可以保留在已发布的代码中,而不会产生高性能成本. log4j 使用分层记录器可以有 ...

  8. Confluence 6 其他 MBeans 和高 CPU 消耗线程

    其他 MBeans 希望监控 Hibernate 和 Hazelcast(仅针对 Confluence 数据中心)你需要在你的 setenv.sh / setenv.bat 文件中添加下面的内容. s ...

  9. mysql数据库1

      desc 表名;  显示表结构

  10. Python学习【第2篇】:Python数据结构

    Python数据结构 1.数字类型 2.字符串 3.列表 4.元组 5.字典 6.集合