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 相关文章推荐
IE浏览器兼容Firefox的JS脚本的代码
Oct 23 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
Oct 18 Javascript
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
jQuery中[attribute=value]选择器用法实例
Dec 31 Javascript
Vuex 进阶之模块化组织详解
Jan 12 Javascript
js数组常用最重要的方法
Feb 04 Javascript
JS实现显示当前日期的实例代码
Jul 03 Javascript
JavaScript实现答题评分功能页面
Jun 24 Javascript
基于javascript实现移动端轮播图效果
Dec 21 Javascript
react中的DOM操作实现
Jun 30 Javascript
Javascript设计模式之原型模式详细
Oct 05 Javascript
vue封装数字翻牌器
Apr 20 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
关于Java finally的面试题
2016/04/27 面试题
金融专业个人求职信范文
2013/11/28 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
园艺师求职信
2014/04/27 职场文书
教书育人演讲稿
2014/09/11 职场文书
要账委托书范本
2014/09/15 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
初中运动会前导词
2015/07/20 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
党员心得体会范文2016
2016/01/23 职场文书