原文链接:https://geniuspeng.github.io/2018/04/26/mobile-issues2/

坑是无穷无尽的,嗯…长江后坑推前坑~~

关于音频自动播放

H5的audio标签实现了浏览器端的音频播放可能性,虽然目前的手机浏览器也都支持这个标签和相关属性,但不同的手机对其表现行为还是五花八门,而且有的时候还和客户端那边的音频控制相关。这次遇到了一个问题是iOS中无法自动播放音频(autoplay无效,目测他们是考虑了流量问题吧),解决方法也还好,一般如果是微信里,可以使用他们自带的一个事件来解决。不过需要先引入他们的js:

1
<script src="//res.wx.qq.com/open/js/jweixin-1.0.0.js"/>

然后在ready之后监听一个微信定义特殊的事件WeixinJSBridgeReady:

1
2
3
document.addEventListener("WeixinJSBridgeReady", function () {
document.getElementById('bgm').play();
}, false);

如果是Safari这种,基本上就是通过交互来解决了,比如让用户第一次触摸的时候播放音乐

1
2
3
$(document).one('touchstart', function() {
document.getElementById('bgm').play();
})

关于软键盘问题

H5页面中的输入框,输入框focus的时候就会弹出软键盘,失去焦点的时候键盘消失。其实正常来讲都还好,只是有的时候软键盘可能把输入框挡住,或者按钮挡住,这个倒不算什么大问题,这次令人头疼的是某些奇葩安卓机,如果使用了绝对定位或者fixed,软键盘弹出来的时候把页面往上推,推的下面出来一大块空白特别丑~这里的解决方法其实也很简单

1
$('body').height($('body')[0].clientHeight);

还有一些更奇葩的安卓手机,软键盘出来的时候把页面顶上去,消失的时候把页面往下拉,又拉出一大片空白区域,需要手动上滑一下才正常。这里试了好多方法,最后找到了一个还算可以解决的,需要找到那个被拉下来的相关元素,然后执行scrollIntoView()方法即可,

1
2
3
4
5
6
7
let input = document.querySelector('input')
input.addEventListener('blur', function (e) {
e.preventDefault();
setTimeout(() => {
$('.the-element')[0].scrollIntoView();
}, 0)
})

关于scrollIntoView的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
element.scrollIntoView();
//不显示声明任何参数,则相当于是element.scrollIntoView(true)

element.scrollIntoView(alignToTop);
//Boolean类型参数
//如果为 true,则元素的顶部将尽可能滚动到与父元素可见区域顶部对齐的位置,这是默认值。
//如果为 false,则元素的底部将尽可能滚动到与父元素可见区域底部对齐的位置

element.scrollIntoView(scrollIntoViewOptions);
//Object类型参数 {
behavior: 'auto' | 'instant' | 'smooth',
block: 'start' | 'end'
} //behavior:定义了元素滚动的行为,instant代表是立即滚动元素,smooth代表动画性的平滑滚动,但大部分浏览器并不支持smooth这个属性值,一般都是 instant。
//block:定义了元素滚动的方向,对应Boolean类型参数,如果设置了start值,则相当于是设置了element.scrollIntoView(true),如果设置了end值,则相当于是设置了element.scrollIntoView(false),

嗯,多学习吧~~长路漫漫!

文末福利:

福利一:前端,Java,产品经理,微信小程序,Python等10G资源合集大放送:https://www.jianshu.com/p/e8197d4d9880

福利二:微信小程序入门与实战全套详细视频教程。

【领取方法】

关注 【编程微刊】微信公众号:

回复【小程序demo】一键领取130个微信小程序源码demo资源。

回复【领取资源】一键领取前端,Java,产品经理,微信小程序,Python等资源合集10G资源大放送。

那些移动端web踩过的坑2的更多相关文章

  1. 那些移动端web踩过的坑

    原文链接:https://geniuspeng.github.io/2017/08/24/mobile-issues/ 扔了N久,还是捡回来了.好好弄一下吧.刚工作的时候挺忙的,后来不那么忙了,但是变 ...

  2. 【饿了么】—— Vue2.0高仿饿了么核心模块&移动端Web App项目爬坑(三)

    前言:接着上一篇项目总结,这一篇是学习过程记录的最后一篇,这里会梳理:评论组件.商家组件.优化.打包.相关资料链接.项目github地址:https://github.com/66Web/ljq_el ...

  3. 移动端web开发的那些坑

    1.为非a列表项添加触感样式 通过js注册touchstart和touchend事件,添加触感class的方式, 有个坑,低版本的Android浏览器,经常触发不到touchend,需要再额外注册一个 ...

  4. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  5. 第八篇:web之前端踩的一些坑

    前端踩的一些坑   前端踩的一些坑 本节内容 事件代理 清除标签的所有事件 bootstrap的模态框自定义方法 ajax在django里面实现post提交 ajax提交数据嵌套 1.事件代理 之前写 ...

  6. 移动端h5页面的那些坑

    最近一直在写移动端页面,由于之前写移动端写的比较少,所以此次踩过许多坑.特此总结一下: 1.<input type='button'>背景色在ios中的兼容性,颜色发白 解决办法:在全局样 ...

  7. apicloud地图、即时通讯、人脸识别登录、以及平时踩过得坑

    apicloud技术浅谈 导语 apicloud 的学习也有一段时间了,这是我个人的一些经验,和踩过的坑,希望对大家能有一些帮助. apicloud的知识准备 apicloud 是一个用原生的思想搭建 ...

  8. H5 缓存机制浅析 移动端 Web 加载性能优化

    腾讯Bugly特约作者:贺辉超 1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5 引入的离线存储, ...

  9. 简述移动端IM开发的那些坑:架构设计、通信协议和客户端

    1.前言 有过移动端开发经历的开发者都深有体会:移动端IM的开发,与传统PC端IM有很大的不同,尤其无线网络的不可靠性.移动端硬件设备资源的有限性等问题,导致一个完整的移动端IM架构设计和实现都充满着 ...

随机推荐

  1. HDU 4107 Gangster

    Gangster Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 4 ...

  2. ArcGIS中数据之间的转换接口IFeatureDataConverter2

    之前我写过一篇文章关于ArcGIS各种空间数据格式之间转换的通用方法:ArcGIS中sde,mdb,shp数据之间的转换.这里使用的主要接口方法就是用到了IFeatureDataConverter接口 ...

  3. Android记录16-友盟第三方登录、分享实现

    Android开发记录16-友盟第三方登录.分享实现 2014年博客之星,投票地址username=wwj_748#content" style="font-family: Kai ...

  4. HDU 1166 敌兵布阵 Segment Tree题解

    本题是最主要的分段树操作了.或者一般叫线段树,只是好像和线段没什么关系,仅仅是分段了. 不使用lazy标志,更新仅仅是更新单点. 假设不使用分段树,那么更新时间效率仅仅须要O(1),使用分段树更新效率 ...

  5. 电商系统Broadleaf文档翻译(六) - 主要实体main entities

    主要实体 原文标题:main entities 原文出处:http://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts/d ...

  6. 如何创建Hiren的BootCD USB磁盘 -- 制作U盘启动盘

    如何创建Hiren的BootCD USB磁盘 原文 https://www.wintips.org/how-to-create-hirens-bootcd-usb-disk/  本文基本是谷歌翻译 H ...

  7. 4.dubbo-demo+简易监控中心安装+管理控制台安装

    转自:https://blog.csdn.net/zhangweigangweiwu/article/details/52244099 tomcat:apache-tomcat-6.0.39 需要用到 ...

  8. modal模态框插件

    用法: <!--模态框--> <div class="modal fade" id="myModal"> <div class=& ...

  9. IPod在Linux下的实战

    刚收到一个朋友送的Ipod,经过研究今天我为大家分享一点在Linux系统下使用的经验.Apple的iPod它炫目时尚,超薄还可以俘储大量歌曲,这使得iPod十分流行.但流行的同时也带来了一些问题, 在 ...

  10. Vue render: h => h(App) $mount

    $mount()手动挂载 当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中: 假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载.例如: new Vue({ //el: ...