JavaScript中防止微信浏览器被整体拖动的方法


Posted in Javascript onAugust 25, 2017

在微信网页开发中,我使用的页面结构是在body下的container覆盖全屏,container下有个header和page的容器,page负责显示所有内容并实现滚动。

结构如图: 

JavaScript中防止微信浏览器被整体拖动的方法

但是遇到了一个问题:在页面已经滚动到顶部时,继续往下拖动page容器,会将微信浏览器整体往下拖,漏出“该网页由XXX提供”的提示,然后在安卓下,影响并不大,但是在iphone下,就没那么简单了,经过测试,在苹果下,往下拖动后快速滑动页面中的page,page并不会滚动,上拖同样遇到了这个问题,非常影响体验。

查阅文献后,我准备在touchstart和touchmove上做些处理。

思路是当page页面滚动到顶部时,再向下拖动会阻止默认的拖动事件,page页面到底后也阻止向上拖动。结构与代码如下

doctype html

html
  head
    title 微信拖动测试
    meta(charset="utf-8")
    meta(name="viewport", content="initial-scale=1, maximum-scale=1, minimum-scale=1")
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(src="http://apps.bdimg.com/libs/zepto/1.1.4/zepto.min.js")
  body
    #container
      .header
        | header
      .page
        .box box1 in page
        .box box2 in page
        .box box3 in page
        .box.bottom box4 in page
  script.
    $(function() {
      var startY, endY;
      var box_height = $('#container').height();
      $('.page').on('touchstart', function(event) {
        event.stopPropagation();
        startY = event.touches[0].pageY;
      });
      $('.page').on('touchmove', function(event) {
        event.stopPropagation();
        var endY = event.changedTouches[0].pageY;
        var changedY = endY - startY;
        var scroll_top = $('.page').scrollTop();



  // 判断是否在顶部,且向下拖动
        if (scroll_top === 0 && changedY > 0) {
          event.preventDefault();
        }




  // 判断是否在底部,且向上拖动
        var o = $('.bottom').offset();
        if (o.top + o.height === box_height && changedY < 0) {
          event.preventDefault();
        }
      });



 // header禁止拖动
      $('.header').on('touchmove', function(event) {
        event.preventDefault();
      });
    });

样式如下:

*{
  padding: 0;
  margin: 0;
}
#container{
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  background-color: #efefef;
  color: #fff;
  text-align: center;
  font-size: 40px;
}
.header{
  position: absolute;
  left: 0;
  right: 0;
  height: 80px;
  line-height: 80px;
  background-color: #ddd;
}
.page{
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: 80px;
  background-color: #ccc;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.page > *{
  z-index: 1;
}
.box{
  width: 100%;
  height: 300px;
  line-height: 300px;
  box-sizing: border-box;
  border-bottom: 2px solid #fff;
}

总结

以上所述是小编给大家介绍的JavaScript中防止微信浏览器被整体拖动的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
jQuery之折叠面板的深入解析
Jun 19 Javascript
Windows系统下Node.js的简单入门教程
Jun 23 Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
vue兄弟组件传递数据的实例
Sep 06 Javascript
bootstrap table合并行数据并居中对齐效果
Oct 17 Javascript
详解express使用vue-router的history踩坑
Jun 05 Javascript
Vue文本模糊匹配功能如何实现
Jul 30 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 #Javascript
Vue上传组件vue Simple Uploader的用法示例
Aug 25 #Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 #Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 #Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 #Javascript
Vue.js进行查询操作的实例详解
Aug 25 #Javascript
Vue实例中生命周期created和mounted的区别详解
Aug 25 #Javascript
You might like
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
利用Python开发实现简单的记事本
2016/11/15 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
Python yield 使用方法浅析
2017/05/20 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
html Table 表头固定的实现
2019/01/22 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
建筑专业毕业生自荐信
2014/05/25 职场文书
电子商务专业自荐信
2014/06/02 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
python中数组和列表的简单实例
2022/03/25 Python
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL