移动端 js 弹出层内容滚动的时候,不影响body的滚动条处理
2016-05-02 13:19
781 查看
如标题所示,这里受 https://segmentfault.com/a/1190000003849952 这篇文章的启发,自己重写了一下代码
效果图:
代码:
效果图:
代码:
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <title>移动端->弹出层内容滚动的时候,不影响body的滚动条处理</title> <style> *{ margin:0; padding:0; } body{ height:1500px; } .mark{ width:100%; height:100%; background:rgba(0,0,0,.5); position:fixed; left:0; top:0; } .layerNode{ width:200px; height:200px; left:50%; top:50%; margin-left:-100px; margin-top:-100px; background-color:#fff; position: absolute; overflow-y:scroll; -webkit-overflow-scrolling : touch; /* ios 自带滚动条不平滑解决方法 */ }
</style> </head> <body> body层 <div class="mark"> <div class="layerNode"> <p>弹出层 start</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>弹出层 end</p> </div> </div> <script type="text/javascript"> //弹出层滚动条不影响到body [layerNode:需要滚动的元素] var DivScroll = function( layerNode ){ //如果没有这个元素的话,那么将不再执行下去 if ( !document.querySelector( layerNode ) ) return ; this.popupLayer = document.querySelector( layerNode ) ; this.startX = 0 ; this.startY = 0 ; this.popupLayer.addEventListener('touchstart', function (e) { this.startX = e.changedTouches[0].pageX; this.startY = e.changedTouches[0].pageY; }, false); // 仿innerScroll方法 this.popupLayer.addEventListener('touchmove', function (e) { e.stopPropagation(); var deltaX = e.changedTouches[0].pageX - this.startX; var deltaY = e.changedTouches[0].pageY - this.startY; // 只能纵向滚 if(Math.abs(deltaY) < Math.abs(deltaX)){ e.preventDefault(); return false; } if( this.offsetHeight + this.scrollTop >= this.scrollHeight){ if(deltaY < 0) { e.preventDefault(); return false; } } if(this.scrollTop === 0){ if(deltaY > 0) { e.preventDefault(); return false; } } // 会阻止原生滚动 // return false; },false); } //调用 var divScroll = new DivScroll('.layerNode'); </script> </body> </html>
相关文章推荐
- L - Very Happy Great BG
- Java小程序之可视化日历
- Android 一张图理解getWidth和getMeasuredWidth
- iOS开发 ☞ 推送通知(Push Notification)
- MAC Android Studio jni配置
- java关于Object类中9大方法的分析
- 【Android学习】IPC 基础概念(序列化接口介绍)
- ubuntu下Android开发环境
- A - Apples and Ideas
- Android中的Json是什么以及解析
- 【Cocos Creator 实战教程(2)】——天天酷跑(动画、动作相关)
- Cocos2d-JS schedule用法
- [转] IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法
- Cocos2d-JS切换场景与切换特效
- cocos2d中的触摸监听
- Android获取安装软件列表并启动某个app
- Unity学习笔记九 - Survival Shooter Tutorial
- android studio导入项目出错:Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple errors, see logs
- android XML数据解析详解
- Zoj 3947 Very Happy Great BG【水】