h5页面在iOS上的问题解决

1、ios移动端 软键盘收起后,页面内容被顶上去,不下滑回原处

代码如下:

$(function(){
        $(‘input,textarea‘).on(‘blur‘,function(){
            window.scroll(0,0);
        });
        $(‘select‘).on(‘change‘,function(){
            window.scroll(0,0);
        });
 })

原理就是弹起键盘的时候,window.scrollY会从0变到键盘的高度(例如:200),当输入框焦点失去后让scrollY回到0就好了。

但是有一个很严重的问题:如果页面上有按钮需要操作 ,例如,评论的输入框+发布按钮,输入完文字,点击“发布”,触发click事件的时候,会导致页面先触发blur事件,键盘回落,然后一切就结束了。。。。按钮点击没有起任何作用。

解决方案: 把click事件更换成ontouchstart 可以解决这个问题。 ontouchstart 事件优于click事件触发。

2、移动端 input,按钮等样式在安卓与ios上不同的解决方案

input,select,button{
  -webkit-appearance:none;
  appearance:none;
}

去掉 IOS默认样式即可

3、IOS上下拉动滚动条时卡顿、慢

body {

 -webkit-overflow-scrolling: touch;
 overflow-scrolling: touch;

}

4、ios页面拖动问题

body {
/* 当手指从触摸屏上移开,滚动会立即停止 */
 -webkit-overflow-scrolling: auto
 overflow-scrolling: auto
}

5、iphone及ipad下输入框默认内阴影

-webkit-appearance: none;

6、日期问题

对于yyyy-mm-dd hh:mm:ss 这种格式在ios系统不识别。

时间格式化的时候,在浏览器端处理好好的,到了手机端,就变成NAN,或者null,这种情况,是ios系统不能转化这种类型的时间。

let date = new Date(‘2019-02-28 18:33:24‘);    // null

解决方案:转成 yyyy/mm/dd hh:mm:ss 这种格式就可以了。

replace(/-/g, "/")

7、ios在微信小程序的webview,键盘收回,页面底部会留白

这个问题怀疑是页面的scroll设置了auto导致的。

解决思路:

复现该bug以后发现只要滚动一下页面就可以使页面恢复正常,于是就想可不可以在input失去焦点以后调用一下页面滚动,来完成该操作,发现果然可以。然后就产生了如下代码

temporaryRepair(){
    var currentPosition,timer;
    var speed=1;//页面滚动距离
    timer=setInterval(function(){
        currentPosition=document.documentElement.scrollTop || document.body.scrollTop;
        currentPosition-=speed;
        window.scrollTo(0,currentPosition);//页面向上滚动
        currentPosition+=speed; //speed变量
        window.scrollTo(0,currentPosition);//页面向下滚动
        clearInterval(timer);
    },1);
}

8、iphone fixed 失效,导致一些机器上textarea光标偏移

解决方案: 所有兄弟元素变成absolute, 父元素overflow:auto。

父元素{
height: 100vh;
position: relative;
overflow: auto;}

兄弟元素{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow-x: visible;
overflow-y: auto;
padding-bottom: 10px;
z-index: 1;}

9、键盘遮挡输入框

输入框如果使用了fixed固定在底部,键盘顶起的时候,iphone上fixed会失效,导致页面滚动输入框会随着页面滚动,并且在部分机型上,输入框偶尔会被键盘遮挡,这种偶现的问题,很不友好。

解决方案: 放弃使用fixed布局,页面如果有滚动,也放弃absolute,如果强行要使用absolute,请参考上一条光标偏移。建议使用flex布局,兼容性会得到解决。

当然,如果遇到以上这些问题,说明产品设计就很不合理,如果必要的话,还是要更换设计,改成input不需要被键盘顶起的设计,这些兼容性的解决方案,也不并不能完美的解决所有机型的问题。

10、ios和android下触摸元素时出现半透明灰色遮罩

-webkit-tap-highlight-color:rgba(255,255,255,0)

11、顶部状态栏背景色

<meta name="apple-mobile-web-app-status-bar-style" content="black" />

说明:

除非你先使用apple-mobile-web-app-capable指定全屏模式,否则这个meta标签不会起任何作用。

如果content设置为default,则状态栏正常显示。如果设置为blank,则状态栏会有一个黑色的背景。如果设置为blank-translucent,则状态栏显示为黑色半透明。

如果设置为default或blank,则页面显示在状态栏的下方,即状态栏占据上方部分,页面占据下方部分,二者没有遮挡对方或被遮挡。

如果设置为blank-translucent,则页面会充满屏幕,其中页面顶部会被状态栏遮盖住(会覆盖页面20px高度,而iphone4和itouch4的Retina屏幕为40px)。

默认值是default。

12、IOS中input键盘事件keyup、keydown、keypress支持不是很好

问题是这样的,用input search做模糊搜索的时候,在键盘里面输入关键词,会通过ajax后台查询,然后返回数据,然后再对返回的数据进行关键词标红。

用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中变红很慢,用输入法输入之后,并未立刻相应keyup事件,只有在通过删除之后才能相应!

解决办法:

可以用html5的oninput事件去代替keyup,然后就达到类似keyup的效果!

<input type="text" id="testInput">
<script type="text/javascript">
 document.getElementById(‘testInput‘).addEventListener(‘input‘, function(e){
   var value = e.target.value;
 });
</script>

原文地址:https://www.cnblogs.com/coldfishdt/p/10944343.html

时间: 2024-08-03 04:56:40

h5页面在iOS上的问题解决的相关文章

混合app开发,h5页面调用ios原生APP的接口

混合APP开发中,前端开发H5页面,不免会把兼容性拉进来,在做页面的兼容性同事,会与原生app产生一些数据交互: 混合APP开发,安卓的兼容性倒是好说,安卓使用是chrome浏览器核心,已经很好兼容H5页面,而且运行机制也是能够同步运行:但ios上就没那么容易了:. 在此我就不说兼容安卓的问题,只把ios问题说说: 问题1:H5调用ios接口,ios需要初始化,js代码在ISO上只运行一次 解决: 本人使用是angular框架搭建的H5页面 var ua = navigator.userAgen

H5页面在 ios 端滑动不流畅的问题

IOS系统的惯性滑动效果非常6,但是当我们对div加overflow-y:auto;后是不会出这个效果的,滑动的时候会感觉很生涩.怎么办? 方案一: 在滚动容器内加-webkit-overflow-scrolling: touch 但这个方案有一个问题,在页面内具有多个overflow:auto的情况下,那些具有 绝对定位(absolute, fixed) 属性的元素,也会跟着滚动. 方案二: body {overflow-x: hidden} 即,给 body 元素添加overflow-x:h

h5页面在ios机上禁止长按复制

(注意,增加之后需要对input的另外设置,不然输入框无法输入)场景:H5出现一个按钮需要长按几秒展示动画的,如:skcs.net-tactic.com/wap/peace/index,这时就需要用到禁止苹果的 ios机默认存在长按复制选择,用以下代码取消: *{ -webkit-touch-callout:none; /*系统默认菜单被禁用*/ -webkit-user-select:none; /*webkit浏览器*/ -khtml-user-select:none; /*早期浏览器*/

为了方便h5页面在app上调试看到打印的日志 重写window.console

(function(){ var print={ lock:true, log:function(param){ if(this.lock){ var element=document.createElement("div"); element.style.background='green' element.style.fontSize='20px' switch (typeof param){ case "string" :element.innerHTML=p

H5页面在iOS网页中的数字被识别为电话号码,字体颜色变黑色,且颜色不可改变

解决办法:在html中添加代码: <meta name="format-detection" content="telephone=no" /> 原文地址:https://www.cnblogs.com/LChenglong/p/11169529.html

微信h5页面中跳转下载第三方app的办法

需求:在微信h5页面中下载第三方app -- 安卓, 直接下载apk文件包:iphone,跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX有合作的应用,否则也不支持通过scheme跳转第三方app) 变通方法: 一.借助TX的应用市场 --'应用宝':将app上架应用宝,在微信中点击下载按钮(app的应用宝微下载地址),安卓则可跳转应用直接进行下载,iphone则会自动跳转Appstore(需在TX开发平台进行配置) 总结:虽然这种方

微信h5页面中跳转外部浏览器下载APK的办法

需求:在微信h5页面中下载第三方app -- 安卓, 直接下载apk文件包:iphone,跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX有合作的应用,否则也不支持通过scheme跳转第三方app) 变通方法: 一.借助TX的应用市场 --'应用宝':将app上架应用宝,在微信中点击下载按钮(app的应用宝微下载地址),安卓则可跳转应用直接进行下载,iphone则会自动跳转Appstore(需在TX开发平台进行配置) 总结:虽然这种方

如何判断一个APP页面是原生的还是H5页面

来源:http://www.25xt.com/appdesign/11851.html Hybrid APP指的是半原生半Web的混合类App.需要下载安装,看上去类似Native App,但只有很少的UI Web View,访问的内容是 Web . 原生是Native APP,H5就是Web App 在Hybrid 当中,如何快速的判断一个APP页面是原生的还是H5页面呢? 1.看断网的情况 把手机的网络断掉.然后点开页面.然后可以正常显示的东西就是原生写的. 显示404或则错误页面的是htm

h5页面

h5 界面设计遵循的尺寸:6:750*1334:6plus:1080*1920:android:720*1280 h5的特点:滚屏式页面,区分于网页有独立的滑动条,这就要求我们在设计h5时应注意没屏的内容必须单独存在于本屏幕中,不得跨界,否则超出内容看不到, h5页面在数量上控制在5-8屏,太少,意义不大,因为它另一个特点就是多维度的展示活动主题的,所以在数量上要维持好,多了乏味,观赏者也没有那没多的时间或者说兴趣. h5设计时注意事项:背景.排版或其他方面要有所统一,单是也要在色彩,形状或其他