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 相关文章推荐
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
Apr 15 Javascript
jquery $(this).attr $(this).val方法使用介绍
Oct 08 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
javascript与jquery动态创建html元素示例
Jul 25 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
JavaScript函数参数的传递方式详解
Mar 06 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
Apr 27 Javascript
浅谈Node 调试工具入门教程
Mar 20 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 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
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
php检测useragent版本示例
2014/03/24 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
详解vue-router基本使用
2017/04/18 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python随机函数random()使用方法小结
2018/04/29 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
python Selenium 库的使用技巧
2020/10/16 Python
园艺师求职信
2014/03/10 职场文书
网站创业计划书
2014/04/30 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
学校教师培训工作总结
2015/10/14 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
React四级菜单的实现
2022/04/08 Javascript
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js