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 相关文章推荐
javascript 命名空间以提高代码重用性
Nov 13 Javascript
层序遍历在ExtJs的TreePanel中的应用
Oct 16 Javascript
JS写的贪吃蛇游戏(个人练习)
Jul 08 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
Angular.Js之Scope作用域的学习教程
Apr 27 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
Feb 22 Javascript
VSCode中如何利用d.ts文件进行js智能提示
Apr 13 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
Apr 24 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
使用vue for时为什么要key【推荐】
Jul 11 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
纯javascript版日历控件
2016/11/24 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
python实现ipsec开权限实例
2014/11/11 Python
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python随机生成数模块random使用实例
2015/04/13 Python
Python实现的简单算术游戏实例
2015/05/26 Python
python requests 使用快速入门
2017/08/31 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
PyTorch中的C++扩展实现
2020/04/02 Python
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
武汉某公司的C#笔试题面试题
2015/12/25 面试题
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
生物化工专业个人自荐信
2013/09/26 职场文书
商场消防演习方案
2014/02/12 职场文书
代办出身证明书
2014/10/21 职场文书
退学证明范本3篇
2014/10/29 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
php字符串倒叙
2021/04/01 PHP