一. 运行环境:

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. django日志配置

    直接参考这篇,很详细:https://www.cnblogs.com/changqing8023/p/9639769.html 补充一点:日志文件打开时,中文乱码,要在handler中设置编码格式,' ...

  2. 更改html代码后网页不更新

    写了一个非常简单的 html 页面,只有简单的跳转功能,但是在 Eclipse 下更改代码后用 chrome 浏览器打开时还是显示原来的网页.开始我以为是网页有错误或者有不规范的地方,因为我编写的是 ...

  3. sass实战演练01 - 外部文件引用和变量

    SASS是什么? 目前前端开发中css已经是公认的”前端程序员必须掌握”的知识,最早的css编写都是手工一条条写出来的,工作量大.不利于维护. 而sass的存在使得css开发可以像写代码一样最终生成一 ...

  4. 让Hibernate和触发器协同工作

        Sql Server触发器和hibernate一起使用时经常报类似如下错误 Batch update returned unexpected row count from update [0] ...

  5. python判断任务是CPU密集型还是IO密集型

    目前已经知道,在需要并发执行任务的时候,需要使用多线程或者多进程;如果是IO密集型任务,使用多线程,如果是CPU密集型任务,使用多进程;但问题是,经常我们会遇到一种情况就是:需要被执行的任务既有IO操 ...

  6. Kubernetes 本地仓库

    1.Kubernetes本地私有仓库 Docker仓库主要用于存放Docker镜像,Docker仓库分为公共仓库和私有仓库,基于registry可以搭建本地私有仓库.使用私有仓库有如下优点: 1)节省 ...

  7. tensorflow serving 之minist_saved_model.py解读

    最近在学习tensorflow serving,但是就这样平淡看代码可能觉得不能真正思考,就想着写个文章看看,自己写给自己的,就像自己对着镜子演讲一样,写个文章也像自己给自己讲课,这样思考的比较深,学 ...

  8. 三种方法让Response.Redirect在新窗口打开

    通过设置form的target属性同样可以让Response.Rederect所指向的url在新的窗口打开,下面为大家介绍三种具体的实现方法 Response.Rederect在默认情况下是在本页跳转 ...

  9. 根据获取的窗口句柄遍历窗口Edit控件

    网上说遍历窗口控件有两种方法: 1),使用EnumChildWindows,没有深究,     学习网址如下:http://blog.sina.com.cn/s/blog_60ac1c4b010116 ...

  10. vue-router,vuex

    vue设置路由为了服务器渲染今天换另一种方式首先在文件夹中router建立router和routes两个js文件,router用来设置路由,routes用来建立路由代码如下: router: impo ...