移动端的弹窗内容有滚动条,滚动到底部或顶部时或影响弹窗下的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. UDP/TCP拾遗

    1.UDP的特点 (1)UDP 是无连接的,即发送数据之前不需要建立连接. (2)UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制. (3)UDP 是面向报文的.UDP 没有拥塞控制 ...

  2. T-SQL删除存储过程

    使用T-SQL脚本删除存储过程 语法: --声明数据库引用use 数据库名称;go --判断是否存在存储过程,如果存在则删除if exists(select * from sys.procedures ...

  3. python笔记---需求文件requirements.txt的创建及使用

    /******************************************/ 感谢大家一直以来的关注与支持. 本站迁移至 http://qingkang.me 也欢迎大家继续关注. /** ...

  4. 前端 ---- js 模拟百度导航栏滚动案例

    模拟百度导航栏滚动监听 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  5. Go斐波拉契数列(Fibonacci)(多种写法)

    1 前言 斐波拉契数列有递归写法和尾递归和迭代写法. 2 代码 //recursion func fib(n int) int{ if n < 2{ return n }else{ return ...

  6. Python装饰器执行顺序详解

    探究多个装饰器执行顺序 装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思. 疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会 ...

  7. AES加解密程序的实现

    AES加解密程序的实现正常情况,用户不能访问sys.dbms_crypto,需要DBA授权:grant execute on dbms_crypto to crm;建立加解密的PKG_AES包:CRE ...

  8. Linux平台 Oracle 18c RAC安装

    Linux平台 Oracle 18c RAC安装Part1:准备工作 2018-08-04 22:20 by AlfredZhao, 1065 阅读, 0 评论, 收藏, 编辑 一.实施前期准备工作 ...

  9. ie.360,qq浏览器这种ie内核浏览器默认阻止弹窗

  10. a href=#与 a href=javascript:void(0) 的区别(转)

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...