一. 运行环境:

iphone所有机型的qq浏览器,safari浏览器,微信内置浏览器(qq浏览器内核)等。

二. 异常现象:

1. 大幅度上下滑动h5页面,然后停止滑动,有时候会影响到页面滚动,如局部滚动条;

2. 大幅度上下滑动h5页面,页面中的悬浮层,如头部,底部菜单之类需要固定在指定位置的层不会随着挣个界面滑动;如果对前端的定位方式不太熟练的话,甚至会出现悬浮层的框架与内容相分离的现象。

三. 解决方法:

1.屏蔽滑动手势——具体解决方法有待探索研究,慎用

直接屏蔽浏览器的滑动手势——干脆直接,省时省力,免除一切ios中部分浏览器默认滑动手势带来的不正常

示例代码:

window.addEventListener('touchstart',function(e){e.preventDefault();});
window.addEventListener(‘touchmove’,function(e){e.preventDefault();});

个人感觉如果没有特殊要求的话,直接使用这种方法就好了,两行代码就能免除后患。

注意:这种方法直接屏蔽了页面的滚动方式,具体解决方法有待探索研究,慎用。

2.动态修改悬浮层定位方式

动态修改悬浮层的定位方式——保留浏览器中默认的上拉下滑手势,又解决了悬浮层脱离整体页面的问题

示例代码:

  //angular的写法,仅供参考
angular.element(document).on('scroll', function () {
var scrollHeight = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
var window_height = $(window).height() + $(window).scrollTop();
if (scrollHeight <= window_height) {
//页面停止滑动,滚动容器恢复默认定位
$(ele).css({'position': 'absolute'})
} else {
//页面滚动,滚动容器设置固定定位,随着微信内置浏览器一块儿滑动
$(ele).css({'position': 'static'})
}
})

如果一定要保留浏览器默认的滑动手势的话,那就只能用这种方式了,在滑动页面的时候,动态将悬浮层的定位方式修改为相对定位,滑动的时候触发浏览器自身的滑动手势的时候,悬浮层就会相对于整个H5界面定位,这样就不会出现分离的现象了;

对于习惯了ios上拉下滑整个界面的用户来说,这种做法的确会好一点,但是需要多所有需要随着界面整体滑动的悬浮层都有单独处理,这个就麻烦点了。

3. 合理使用css样式:

将所有无需固定但是又使用了fixed定位的元素都改为absolute定位,就可以解决问题了,已经证明该方法有效:

position:absolute; 

注意:

1.页面顶部的元素不要使用固定定位,如头部导航栏可以改为绝对定位,这样ios中就不会脱离文档流了;

2.对于处于屏幕底部展示的一些需要固定位置的元素则可以使用固定定位fixed;

3.在有滚动条的情况下,fixed定位不会随滚动条移动而移动,而absolute则会随滚动条移动,所以要保证悬浮层在需要滚动的层的外围。相对来说,个人感觉还是这种方法比较靠谱。

ios系统微信浏览器、safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法的更多相关文章

  1. 移动端H5页面 input 获取焦点时,虚拟键盘挡住input输入框解决方法

    在移动端h5开发的时候,发现如果input在页面底部,当触发input焦点的时候会弹出系统虚拟键盘,虚拟键盘会遮挡input输入框.这会很影响用户体验,于是在网上找到了如下的解决办法: 方法一:使用w ...

  2. 移动端H5页面_input获取焦点时,虚拟键盘挡住input输入框解决方法

    在移动端h5开发的时候,发现如果input在页面底部,当触发input焦点的时候会弹出系统虚拟键盘,虚拟键盘会遮挡input输入框.这会很影响用户体验,于是在网上找到了如下的解决办法: 方法一:使用w ...

  3. 【系统Configmachine.config与自己的应用程序的App.config/Web.Config配置节点重复】解决方法

    自己的应用程序的App.config或Web.Config文件中与系统的C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Configmachine.co ...

  4. 在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法

    在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法 在Eclipse中运行Jboss时,时间太长可能有时候会出现java ...

  5. 如何在ios手机端的Safari浏览器 中“查看网页源代码”

    在这里给大家分享一个很简单的用苹果手机无需越狱就可以查看网页源代码的方法,不过这个方法只用于苹果手机自带的Safari浏览器 随便添加一个safari 书签 (用于一会改为查看源码功能书签)进入书签 ...

  6. iOS之Safari调试webView/H5页面

    之前做过混合开发,用的是JavaScriptCore+OC+UIWebView. Safari调试功能真的很有用,通过它可以轻松定位问题的所在,下面说说怎么调试. 开启Safari开发菜单 在Mac的 ...

  7. 微信公众号开发之H5页面跳转到指定的小程序

    前言: 最近公司有一个这样的需要,需要从我们在现有的公众号H5页面中加一个跳转到第三方小程序的按钮.之前只知道小程序之间是可以相互跳转的,今天查阅了下微信开发文档原来现在H5网页也支持小程序之间的跳转 ...

  8. IPhone中H5页面用on绑定click无效的解决方法

    首先声明本人资质尚浅,本文只用于个人总结.如有错误,欢迎指正.共同提高. --------------------------------------------------------------- ...

  9. 微信小程序内联h5页面,实现分享

    在小程序内直联h5的页面(pages/webview/webview.js),该页面为<web-view>的容器,使用<web-view>组件 <web-view wx: ...

随机推荐

  1. 深度学习原理与框架-Tensorflow基本操作-Tensorflow中的变量

    1.tf.Variable([[1, 2]])  # 创建一个变量 参数说明:[[1, 2]] 表示输入的数据,为一行二列的数据 2.tf.global_variables_initializer() ...

  2. 无法解析db.properties,spring报错:Caused by: java.sql.SQLException: unkow jdbc driver : ${url}

    db.properties中配置了url等jdbc连接属性: driver=org.sqlite.JDBCurl=jdbc:sqlite:D:/xxx/data/sqliteDB/demo.dbuse ...

  3. Homebrew安装与使用

    Homebrew是什么? 官方解释: Homebrew是以最简单,最灵活的方式来安装苹果公司在MacOS中不包含的UNIX工具. 官网:传送门 Git仓库地址:传送门 Homebrew 怎么安装 ?怎 ...

  4. Visual SVN Server备份脚本

    set tt=%date:~0,4%%date:~5,2%%date:~8,2% mkdir D:\SVN_BACKUP_%tt%\Repositories xcopy C:\Repositories ...

  5. Linux ftp软件安装、配置和启动

    ftp软件安装.配置和启动及相关问题的解决在测试环境使用过程中经常使用.本文以SuSE11sp1上vsftpd的安装过程进行介绍. 测试环境 SuSE11sp1 vsftp软件安装检查 1.rpm - ...

  6. 点击li往数组添加对应li的id再点击移除,根据是否有class判断

    if($(this).hasClass('click')){ $(this).removeClass('click'); var idAPP = $(this).attr('id'), index = ...

  7. Struct2.0学习笔记1

    为了更好的配合队友写项目 现在学习如下 1.目录 2. 3. Struct2-Action 配置环境 4. 改action 名字 不用重启服务器(从上面粘贴) 改成true 即开发模式 5.想看源码 ...

  8. unity3d热更新插件uLua学习整理

    前言 IOS不能热更新,不是因为不能用反射,是因为System.Reflection.Assembly.Load 无法使用System.Reflection.Emit 无法使用System.CodeD ...

  9. SqlServer 中 for xml path 相关

    表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"' ...

  10. springboot 线程池

    我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行,今天我们就来实战体验这个线程池服务: 本 ...