手机兼容集锦

jqm点击一次触发多次事件

jQuery Mobile会增强我们原始的HTML页面,为此它有自己一些特性。你的html页面没有遵循这个特性导致你的JS脚本执行了多次。这样改造
1、用下面的代码将你认为的一个页面包裹起来
<div data-role="page"></div>
2、将你的JS放在上面的div之中。
这样Jquerympbile就不会将你的JS执行两次了。

-------------------------------------------------------------

1.   -webkit-tap-highlight-color

-webkit-tap-highlight-color:rgba(255,255,255,0);用来把android上点击网页时出现的橙色框的设置为透明

2.  抓取手指坐标
通常在touchstart或者touchmove事件发生的时候,我们这样取值   e.touches[0].pageX 、e.touches[0].pageY但是在touchend事件发生的时候取值,要这样  e.changedTouches[0].pageX  、e.changedTouches[0].pageY;他们之间虽然差别很小,但是就这一点会有很多问题噢。

3.  使用touchend等事件,点击mask(遮罩层)会点穿到下面这个是我前阵子做一个功能时候遇见问题折腾了许久,陷在里面大bug!!!!!
具体情况如标题所说,在手机上使用手机事件,在遮罩层上点击的话,会点击到下面的标签上,如果是a标签的话,会跳转等。
所以如果非要用手机事件的话,可以类似这样写。
document.body.addEventListener(‘touchstart‘, function(e) {
        if (e.target.className === ‘mask‘) {  //如果点上的是遮罩层的话,执行遮罩层消失的动作,然后在全局(注意是全局,因为绑在了body上),阻止默认事件。
            isClose();
            e.preventDefault();
        }
    }, false);

可悲的是,我遇见一个更恶心的,这样做了以后竟然不起效!!!!
折腾很久后发现,下面的是个iframe标签,穿透点击它,会打开一个对话框。
好吧,只能隐藏了(在它上面再放一个iframe也不行的)。解决了,舒心了

4.  手机上对body或者document.documentElement绑定click事件,无效
如果是点在一个遮罩层(mask)上,没内容。你会发现,你怎么点都不起任何效应,直接无视。但是你对一个个标签绑定事件以后,给mask的事件就只写个绑定的,然后不做任何实际的事,就写个console.log(‘aa‘);,你就会发现特么又能用了。
此外,对待此类问题的最好办法,是用上面的touch事件,结合preventDefault()来用,因为我讨厌hack。

5.  默认隐藏掉地址栏
window.scrollTo(0,1)这样触发滚动一个像素 就可以隐藏地址栏了 
addEventListener(‘load‘, function () {
   var hideUrlBar = function () {
       window.scrollTo(0, 1);
   };
   setTimeout(hideUrlBar, 0);
}, false);

6.  避免忘记的属性值
window.innerHeight  指的是荧幕当前实际能显示的高度window.pageYOffset  类似scrollTop的效果

7.  android上面input的bug

在android上,当输入的元素被点击,唤起键盘后,会发现有一个假的输入元素在周围,飘着,很影响。
有一个比较可行的办法是如果你这个元素id为user的话,那么那个元素的id名会是这样     #fake-user  ,多了一个fake-这样你在css对这个元素设置一些样式,看起来和你那个元素比较一致就不影响美观了

8.  flash在android上面超级牛逼,盖住一切东西

嘗試過的辦法:

1.普通修改wmode屬性值的辦法

2.把flash這個元素放到iframe裏面,調整自身或者遮住的物件的index值

3.把flash這個元素放到iframe裏面,并再插入一個iframe,讓其絕對定位,蓋到flash上面,調整index值

4.把被遮物件放入iframe中,調整index
好吧,如果你有什么高招,求介绍!!!!
据说在原生2.3上是不带flash的(但是能安装)

9.  如何针对手机横屏竖屏写样式?
这样是针对iphone竖屏的时候,最大宽度为320px的样式

@media screen and (max-width: 320px){
    h1 span:nth-child(1) { display: inline; }
}

这个是针对iphone横屏的时候,最小宽度为321px的样式
 
@media screen and (min-width: 321px)
{
    h1 span:nth-child(2) { display: inline; }
}

详细介绍:移步http://www.thecssninja.com/css/iphone-orientation-css

10.  pointer-events
pointer-events主要有auto和none两个值。主要用来使想点击的具有点击的功能,不想点击的使它无效(也就是下面文章所说点击范围最大化)。
http://www.qianduan.net/css3-pointer-event-description.html

11.  防止拨号,防止发邮件
一般来说,手机浏览器上点击一串数字时候,会识别为手机号码,拨出去,避免这种麻烦,添加这个meta标签即可,<meta content="telephone=no" name="format-detection" />,避免发邮件也类似<meta content="email=no" name="format-detection" />

12.  关闭input自动首字母大写
input元素新增了autocapitalize这个属性,通过指定autocapitalize=‘off‘可以关闭键盘默认首字母大写。

13. 利用window的history对象,模拟返回前一个页面
window.history.go(-1);window.history.back();

群里经验总结:
1.移动web开发需要多少版本?
 在国内做移动web的话,一般需要做几套输出 wap(诺基亚机器) ,ucweb 7.9以下(no js), android的个别特效开发,apple的i系列的丰富应用 
2.手机不支持的css属性

position:fixed;  (需要用js来模拟)
据其他人测试说: iTouch iPhone iPad Android 2.2  2.3都不支持overflow:scroll;  IOS5支持这个属性了。
手机IOS设备css兼容集
根据我做手机项目一年左右的经验来看,苹果系列产品(iphone,ipad)对css3这块支持的是最好的,不像android报的bug非常多,而且比较莫名其妙,所以就有了i系列富应用,android系列基本应用这么一说。但是苹果它肯定也有它自身的一些兼容问题,需要我们去注意,下面我做一些自己的总结,会不断更新。
一、textarea这个标签,具有默认样式
-webkit-appearance: none;   通过这个属性可以取消

二、label的for属性不起作用了
具体是这样,一般我们都对label设置for属性,它指向一个id,然后一点label的时候,对应到相关设置了id的input之类的标签上,以提高用户体验,但是我最近做东西发现,iphone上不支持这个属性,不管是4还是5。
以前做过类似的东西,没有发现这个问题,而且现在代码和以前一模一样,for可以顶用的,好好的啊?!后来才发现是因为原来那个label上面已经绑定过onclick事件了,所以正好触发了,就没出现这个bug,下面说下解决办法。
<label for="test" onclick=""><input type="checkbox" id="test"/>test</label>
要像这样给label加一个空的onclick事件就好了。

三. 使用translate相关属性,safari会闪烁(群里)
-webkit-backface-visibility: hidden;
-webkit-transform-style: preserve-3d;
http://stackoverflow.com/questions/3461441/prevent-flicker-on-webkit-transition-of-webkit-transform

时间: 2025-02-01 23:45:49

手机兼容集锦的相关文章

前端编写手机兼容页面(简易方式)

这两天开始编写手机页面,作为类似官网一样的使用,因为实在手机端访问的web端,没有做过尝试,而且由于手机的种类很多,导致兼容性要求很高,在网上找了一些教程,制作完毕后决定分析给大家. 先给大家看下成品效果图: 这就是手机访问之后的样子了,那具体怎么做好兼容,又能省事省力呢,我从网上找到了这个框架: 直接百度:ydui,这是一个专门为移动端web前端使用框架,使用方式也很简单,打开这个网站点击开始使用 <!DOCTYPE html> <html> <head> <m

移动端总结和手机兼容问题

H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" /> (部分安卓手机的UC浏览器写完以后还是可以放大缩小) 忽略将页面中的数字识别为电话号码 <meta name="format-detecti

微信小程序开发之IOS/Android兼容坑(持续更新)

一.时间转换问题: 这不只是小程序上面的问题是ios系统 都有这个问题就是new  Date("2017-06-16") 在IOS会出现NAN的情况所以对于时间转换需要另行封装,解决方案如下 1.替换”-“为”/“ 2.删除”.“后面的字符串(带毫秒也会有问题) 二.定位问题 整个页面的fixed定位,在ios下下拉会触发下拉事件,但是没有动画效果.Android就能正常运行 三.absolute定位问题, 这不属于手机兼容问题 使用absolute定位,并且宽带设置了100% 并且设

web移动端兼容

移动端总结和手机兼容问题 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" /> (部分安卓手机的UC浏览器写完以后还是可以放大缩小) 忽略将页面中的数字识别为电话号码 <meta name="f

ios测试基础六:ios模拟不同网速

iOS模拟不同网络速度,模拟2G 3G网速下,检验手机上运行是否正常,各种loading图标使用是否正常等 前提准备: 1. 电脑 上安装 charles或者fiddler 代理软件: 2. iphone真机或模拟器: 操作步骤: 1.将iphone真机绑定 代理,电脑上打开代理软件,比如charles 2. 在charles菜单 栏上 选择 "Proxy"--"Throttle Setting"; 3. 在打开的弹框中,作如下选择,点击"ok"

Hammer.js

一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqery.Jquery2.0版本及以上已经开始偏向移动端,如对h5的支持,但支持还是不够完善,希望jq在后面的版本能够逐渐支持起来. 最初在开发移动端Web的时候使用w3c标准的语法结构和原生的js开发,但相对来说开发量比较大,而且每一步都要考虑各移动端浏览器的兼容,像比较让程序员头痛的大wp手机,很多事

hammerJs-v2.0.4详解

一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqery.Jquery2.0版本及以上已经开始偏向移动端,如对h5的支持,但支持还是不够完善,希望jq在后面的版本能够逐渐支持起来. 最初在开发移动端Web的时候使用w3c标准的语法结构和原生的js开发,但相对来说开发量比较大,而且每一步都要考虑各移动端浏览器的兼容,像比较让程序员头痛的大wp手机,很多事

第二行代码

---恢复内容开始--- 一.开始启程--你的第一行Android代码 Android的四层架构 1.linux内核层--为Android设备的各种硬件提供底层驱动 2.系统运行库层--通过一些C/C++库来为Android系统提供主要的特性支持 Android运行时库,提供一些核心库,允许开发者使用java语言编写Android应用 Dalvik--运行时编译 ART--安装时编译 3.应用框架层--提供构建应用程序时可能遇到的各种API 4.应用层--应用程序 二.先从看得到的入手--探究活

javascript简单的认识下return语句+2015的总结+2016的展望

好久没更新博客了...自从有了mac之后世界变得简单了...日常么,除了研究代码,看别人的代码,写自己的代码.就那样.... 吐槽点:window配个nodejs的环境花了九头牛两只老虎的力气,mac上只要安装,就可以啪啪啪啪了....瞬间无力吐槽... 今天突然想到了偶的徒弟上次说貌似不会用return.....当然啦,我不教他也不会...呵呵哒...然后么大致说了一下 return语句么,字面上么就是个返回...反正日常中么一般都是一个function a(){ }里面么有个return 什