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

 更新时间:2017年08月25日 10:58:41   作者:ZhangCui  
这篇文章主要介绍了JavaScript中防止微信浏览器被整体拖动的方法,需要的朋友可以参考下

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

结构如图: 

但是遇到了一个问题:在页面已经滚动到顶部时,继续往下拖动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中防止微信浏览器被整体拖动的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • ​​​​​​​Rxjs map, mergeMap 和 switchMap 的区别与联系

    ​​​​​​​Rxjs map, mergeMap 和 switchMap 的区别与联系

    这篇文章主要介绍了​​​​​​​Rxjs map,mergeMap和switchMap的区别与联系,map、mergeMap和switchMap是RxJS中的三个主要运算符,在SAP Spartacus开发中有着广泛的使用场景
    2022-07-07
  • JSON stringify方法原理及实例解析

    JSON stringify方法原理及实例解析

    这篇文章主要介绍了JSON stringify方法原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 基于JavaScript实现弹出框效果

    基于JavaScript实现弹出框效果

    弹出框在网站页面中是必不可少的一部分,今天借助脚本之家平台给大家分享使用js实现简单的弹出框效果,感兴趣的朋友一起学习吧
    2016-02-02
  • JavaScript删除指定子元素代码实例

    JavaScript删除指定子元素代码实例

    这篇文章主要介绍了JavaScript删除指定子元素代码实例,本文给出了代码实例和实现代码解释,需要的朋友可以参考下
    2015-01-01
  • 一篇文章让你轻松记住js的隐式转化

    一篇文章让你轻松记住js的隐式转化

    这篇文章主要给大家介绍了如何通过一篇文章让你轻松记住js的隐式转化的相关资料,通过在各种情况下发生的隐式类型的例子,来详细的了解隐式类型转换的过程,需要的朋友可以参考下
    2022-01-01
  • webpack4 升级迁移的实现

    webpack4 升级迁移的实现

    这篇文章主要介绍了webpack 4 升级迁移的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • js实现简单的点名器随机色实例代码

    js实现简单的点名器随机色实例代码

    这篇文章主要给大家介绍了关于js实现简单的点名器随机色的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • JS Thunk 函数的含义和用法实例总结

    JS Thunk 函数的含义和用法实例总结

    这篇文章主要介绍了JS Thunk 函数的含义和用法,结合实例形式总结分析了JS Thunk 函数的具体含义、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • 使用Nest.js实现接口教程示例

    使用Nest.js实现接口教程示例

    这篇文章主要为大家介绍了使用Nest.js实现接口教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • javascript  数组排序与对象排序的实例

    javascript 数组排序与对象排序的实例

    这篇文章主要介绍了javascript 数组排序与对象排序的实例的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论