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 相关文章推荐
IE8 chrome中table隔行换色解决办法
Jul 09 Javascript
防止文件缓存的js代码
Jan 10 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
Dec 31 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
Dec 12 Javascript
jQuery实现可用于博客的动态滑动菜单
Mar 09 Javascript
js添加事件的通用方法推荐
May 15 Javascript
纯JS实现轮播图
Feb 22 Javascript
element-ui 中的table的列隐藏问题解决
Aug 24 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
Aug 25 Javascript
jQuery实现图片下载代码
Jul 18 jQuery
Vue.js组件使用props传递数据的方法
Oct 19 Javascript
在JavaScript中如何使用宏详解
May 06 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
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php的ddos攻击解决方法
2015/01/08 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
浅谈php的优缺点
2015/07/14 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
Javascript 解疑
2009/11/11 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
python实现烟花小程序
2019/01/30 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
J2EE面试题大全
2016/08/06 面试题
业务员自荐信范文
2014/04/20 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
2014年工程工作总结
2014/11/25 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
Python语言规范之Pylint的详细用法
2021/06/24 Python
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers