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 相关文章推荐
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 Javascript
Jquery性能优化详解
May 15 Javascript
jquery ztree实现树的搜索功能
Feb 25 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
js原生Ajax的封装和原理详解
Mar 11 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
Aug 08 jQuery
浅谈JavaScript中的属性:如何遍历属性
Sep 14 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
vue+axios实现文件下载及vue中使用axios的实例
Sep 21 Javascript
JS 验证码功能的三种实现方式
Nov 26 Javascript
vue和iview实现Scroll 数据无限滚动功能
Oct 31 Javascript
在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
桌面中心(一)创建数据库
2006/10/09 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
javascript 隔行换色函数代码
2010/10/24 Javascript
js取得url地址参数实例
2013/02/22 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
纯javascript版日历控件
2016/11/24 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
es6数值的扩展方法
2019/03/11 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
python实现根据月份和日期得到星座的方法
2015/03/27 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python处理按钮消息的实例详解
2017/07/11 Python
Django 前后台的数据传递的方法
2017/08/08 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
中科软笔试题和面试题
2014/10/07 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
国际贸易实训报告
2014/11/05 职场文书