元素滚动到底部或顶部时阻止body滚动
移动端的弹窗内容有滚动条,滚动到底部或顶部时或影响弹窗下的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: '+bodyClientHeight+'</p><p>documentElementClientHeight: '+documentElementClientHeight+'</p><p>bodyClientHeight: '+bodyClientHeight+'</p><p>offsetHeight: '+offsetHeight+'</p><p>bodyScrollHeight: '+bodyScrollHeight+'</p><p>bodyScrollTop: '+bodyScrollTop+'</p><p>screenTop: '+screenTop+'</p><p>screenHeight: '+screenHeight+'</p><p>screenAvailHeight: '+screenAvailHeight+'</p>';
layer.msg(info, {
icon: ,
time: //2秒关闭(如果不配置,默认是3秒)
}, function(){
//do something
});
}
元素滚动到底部或顶部时阻止body滚动的更多相关文章
- 利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动
查看本章节 查看作业目录 需求说明: 利用自定义动画 animate() 方法,实现某图书网站中"近 7 日畅销榜"中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠 ...
- android ListView滚动条监听判断滚动到底部还是顶部
代码: lv.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView vie ...
- Android 控制ScrollView滚动到底部或顶部
在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等, 这里有两种办法,第一种,使用scrollTo(): public static void scrollToBottom ...
- Android为TV端助力 电影栏目移动到底部或者顶部时抖动动画
1 移动到底部上下抖动ObjectAnimator animatorX = ObjectAnimator.ofFloat(holder.itemView,"translationX" ...
- 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 ...
- 滑动到底部或顶部响应的ScrollView实现
关于使用可见:滚动到底部或顶部响应的ScrollView使用 示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手, 小米应用商店, 豌豆荚 两种实现方式的主要 ...
- web自动化,下拉滚动到底部/顶部和下拉滚动到指定的元素
在web自动化,经常会遇到页面显示内容太多的时候,页面就会出现滚动条,一般有两种方式进行下拉,一种是直接下拉到底部/顶部/中部,或者直接给定元素,直接下拉到指定元素的位置. 两种方式的共同点: 两种方 ...
- 记一次包含iframe的需要滚动的元素不能滚动到底部的问题
一个包含上头部.下部模块(包含左右两边模块:侧边栏.内容区域)的页面 前提条件,内容区域: 1.元素高度需要自适应屏幕高度 2.里面内容足够长时,可以滚动 3.包含了一个iframe嵌入的内容很长的页 ...
- 滚动页面时DIV到达顶部时固定在顶部
本示例使用Javascript实现了滚动页面时,DIV到达顶部时固定在顶部.在IE下效果有点闪,效果网址:http://www.keleyi.com/keleyi/phtml/fixdiv.htm 下 ...
随机推荐
- PHP header 允许跨域请求
2018-1-29 17:36:14 星期一 header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods ...
- 解决mysql 主从数据库同步不一致的方法
接着上文 配置完Mysql 主从之后,在使用中可能会出现主从同步失败的情况. mysql> show slave status\G Slave_IO_Running: Yes Slave_SQL ...
- SQL Server循环
1.普通循环 DECLARE @i int BEGIN WHERE Uid=@i --PRINT @i END 2.游标循环(没有事务) ---游标循环(没有事务) BEGIN DECLARE @a ...
- python2.7报错Non-ASCII character '\xe5' in file knn.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Python默认是以ASCII作为编码方式的,如果在自己的Python源码中包含了中文(或者其他非英语系的语言),此时即使你把自己编写的Python源文件以UTF-8格式保存了,但实际上,这依然是不行 ...
- Google开发者大会:你不得不知的Tensorflow小技巧
Google开发者大会:你不得不知的Tensorflow小技巧 同步滚动:开 Google Development Days China 2018近日在中国召开了.非常遗憾,小编因为不可抗性因素滞 ...
- 谷歌被爆秘密研发新系统 欲5年内取代Android
谷歌2年多来有一群工程师秘密研发新系统,希望最终能取代手机操作系统安卓.安卓日前遭欧盟以反垄断为由重罚. 谷歌的新研发计划Fuchsia是从零开始,希望在更多个人装置和各式小巧装置联机上网的情况下,能 ...
- Confluence 6 使用 Velocity 宏
当编辑自定义 Decorator 模板文件的时候,有一些宏可被用来定义页面中复杂或者多变的内容,例如菜单,链接等.你可以插入这些宏到你的模板中.更多的信息,请参考Working With Decora ...
- Vue.js结合vue-router和webpack编写单页路由项目
一.前提 1. 安装了node.js. 2. 安装了npm. 3. 检查是否安装成功: 打开cmd,输入node,没有报“node不是内部或外部命令”表示安装成功node.js. 打开cmd,输入np ...
- LeetCode(98): 验证二叉搜索树
Medium! 题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- Nginx详解五:Nginx基础篇之HTTP请求
http请求 如今的http请求已经不是每一次请求都进行一次三次握手,可以在请求与相应之后,客户端和服务端不断的发送FIN和ACK包来保持连接的状态,即:长连接 HTTP请求建立在一次TCP连接基础上 ...