1 关于page cache
由于移动端浏览器webkit基本都实现了page cache(火狐叫做back-forwoad cache);所以回退操作基本不会触发onload操作了,不过上一页的状态事件都会保存,一般情况下不会出问题,如果需要每次展现都触发事件可以考虑pageshow事件。
但是在三星s3上发现了一个问题,就是直接给dom设置属性的时候(这里指的是dom.prop = value 这种类型的,而不是attribute。)点击后退时原生的浏览器这个属性会丢失,而awen在有些库里用到了这种方式。。。所以悲剧了。后来不得不改为attribute。
ps:某日awen意外 的发现如果引入自己写的sjs库,这个问题奇怪的消失了....看来还有待研究,日后给出解释
2 pointer-events
被悬浮元素盖住的元素基本是无法触发鼠标事件的。一般情况下比较符合要求,但是有时候我们需要触发怎么办?比如说地图。css3中有个样式叫做:pointer-events可以解决,他的值如下:
auto------- 默认值,鼠标不会穿透当前层
none------ 元素不再是鼠标事件的目标,鼠标不再监听当前层而去监听下面的层中的元素。但是如果它的子元素设置了pointer-events为其它值,比如auto,鼠标还是会监听这个子元素的。
其它属性值是针对SVG
兼容性:Firefox 3.6+和chrome 2.0+ 以及safari 4.0+都支持这个CSS3属性,IE6/7/8/9都不支持,Opera在SVG中支持该属性但是HTML中不支持。不过值得庆幸的是,andorid和ios中基本都支持。
3 webkit取消默认的效果
常用的如下几个:
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); //取消点击选取背景色
-webkit-user-drag:none; //取消拖拽
-webkit-user-select:none; //取消用户选取
更详细的说明,看这里:http://ued.ctrip.com/blog/wp-content/webkitcss/
4 touchmove & e.preventDefault
大家都知道在手机上这个方法的重要性。也知道android的不连续触发touchmove的bug,但是android上会有点同样需要注意(只是个人见解,欢迎探讨涨姿势)。
手指touchup之前:如果第一次触发touchmove的时候你调用了e.preventDefault方法,之后整个move的过程系统都不会再处理,哪怕你把该方法写在了判断里,相反如果第一次触发touchmove你没有调用e.preventDefault,那么你想在之后的touchmove触发时不再e.preventDefault那是没门的。
也就是说,android上的touchmove在手指离开屏幕之前,是否取消系统默认事件,只取决于第一次触发touchmove时你有没有调用e.preventDefault.
模拟一种场景,按钮点击,如果我判断移动一段距离之前调用e.preventDefault,出了该距离就不阻止默认事件,基本是没效果的。他只会取决于你第一次touchmove的时候你的判断是不是需要e.preventDefault,来决定之后整个手指在屏幕上的响应是给系统(比如滚动条)还是给你自己操作。
5 quojs&jQ.Mobi的设备判断
判断系统时我的中兴的原生浏览器居然说不是移动设备,我去。看看了quojs源码中的代码:
SUPPORTED_OS = {
Android: /(Android)\s+([\d.]+)/,
ipad: /(iPad).*OS\s([\d_]+)/,
iphone: /(iPhone\sOS)\s([\d_]+)/,
Blackberry: /(BlackBerry|BB10|Playbook).*Version\/([\d.]+)/,
FirefoxOS: /(Mozilla).*Mobile[^\/]*\/([\d\.]*)/,
webOS: /(webOS|hpwOS)[\s\/]([\d.]+)/
};
红色部分有问题,因为中兴的userAgent中"Android"和版本使用'/'间隔的。所以上面红色部分应改为:Android: /(Android)[\s\/]+([\d.]+)/,不知道别的手机是不是也有类似的问题呢?总有些oem厂商强大的就是不走寻常路。
6 fixed on mobile
”position:fixed“的效果有目共睹,在移动设备上除了android2.2以上和ios的5.0之后的版本效果还好,但是在这之前,很多人都被高的郁闷不已。
根据苹果官方文档,当页面上设置了viewport的meta声明之后。手指移动时其实移动的是viewport(抽象出页面),而fixed是针对于页面的,所以当手指移动式,其实页面并没有发生变化,从而导致看上去fixed无效。
对此,jquery mobile用的中规中矩的随着手指一动改变top或者left的位置。sencha touch 和 twitter做的就比较新颖,基本摒弃了viewport的作用了,就像一些实现的滚动条插件的做法。用translate的方法来改变内部元素的位置。这样一来手指滑动的时候,页面和viewport其实都没有移动。
7 translate3d的妙用
有时候在使用css3变换的时候,经常发现页面会发生闪现的情况,这是因为css3变化的时候影响页面渲染造成了非常短暂的卡顿。方法是使用translate3d();来将元素浮出原ui层,这样既可以尽可能的利用硬件加速。上面说的sencha touch 和 twitter都用到了类似处理。
8 css3动画防抖
有时候在做css3动画的时候页面会闪一下,跟上面提到的差不多, 那么可以使使用 '-webkit-backface-visibility' = 'hidden' 或者 "-webkit-perspective: 1000;" 来防止页面抖动。别忘了使用浏览器私有属性hack
9 css透明
很多人觉得,移动开发可以放心opacity了,但是值得注意的是,有时候在有些机器上(android),图片opacity会造成大块的黑色阴影块,第一次碰到的时候直接麻爪了,后来发现是opacity搞的鬼,换成rgba就可以解决了
10 uploadify引起chrome崩溃
很好用的上传工具,可以个问题差点让我崩溃,chrome下会经常出现崩溃。原因不明,大概是chrome缓存了uploadify的某些变量,重新载入时引起js bug。解决办法就是给uploadify的js源文件加时间戳版本号,每次请求新的。。。。
11 android addJavascriptInterface 失效
js调用java的时候,如果测试机器的sdk version >=17 并且应用设置了targetSdkVersion>=17时如果你不加@JavascriptInterface 注解就会出现这一问题。
12 android中注册的javascript桥接类参数个数需谨慎
js往webview中注册的js方法,在webview中被js调用的时候,切记参数个数必须完全一致,做js的不限参数使用惯了这里经常会出错。
13 android4.4 以上的 webview中图片不显示
再android4.4版本之前,我们经常设置 setBlockNetworkImage(true) 来将图片的渲染放在dom加载最后从而提升性能,但是从4.4之后这个属性导致了webview中的图片不能再被加载,原因不明,解决办法,直接设成false或者不设置,当然你也可以判断版本来设置:
if(Build.VERSION.SDK_INT<19){
ws.setBlockNetworkImage(true);
}
14 android4.4 webview页面 onActivityResult 页面刷新
目前本人测试事4.4中,activity发起startActivityForResult,结果回到当前页时,如果布局中有webview,那么页面会刷新,这时候如果你再onActivityResult中执行js方法(loadUrl("javascript:..")) 你就会悲催的发现报错,方法不存在。
可能设置页面不刷新能解决,但是我没找到,cache也不管用,所以用了笨办法,如果是sdk>18 则生成一个运行js的Runnable置于全局,每次页面加载完成时判断这个专用于sdk19以上的Runnable!=null,则执行并置空。
分享到:
相关推荐
项目开发是选择springcloud框架,该文档记录内网开发环境移动端OAuth2接入步骤
微信小程序开发附源码:vue 做移动端微信公众号采坑经验记录
一个基于Vue/Vant开发的移动端H5理财产品页面,用于学习和记录开发知识
一个基于安卓的交通管理系统,实现机动车违章检测,超速限测,行人和乘车人的通行规则制定,实时监控通行路况。同时管理员可以进行违章记录的查询,修改和删除。对违章人事的计分查处。
记录一下本次项目我使用的方法,有更简单便捷的方法,欢迎交流 描述: 假设有a b c 页面 从a页面 到 b页面 ,b页面到c页面 b到c页面的时候需要记录当前b的浏览位置,c返回到b的时候滚动到上次浏览的位置 b在返回a...
内含23个html页面加js ,可直接运行,首页轮播图 分类商品展示,预约-预约记录,商品详情,购物车,会员中心、消费记录等
现代前端工程师已经不单单是开发页面了,你可能需要去开发移动端、服务端。或者和他们有亲密的合作,你需要了解他们的运作流程。 企业想要招聘到一些全能型的工程师,能在工作中串通上下流程,而不是只做开发。 ##...
webpack4+react配置多页面移动端应用程序前言技术栈项目目录结构移动端适配方案webpack配置基础配置开发环境配置react+redux热重载生产环境配置.babelrc配置总结 前言 最近在搞一个基于react的多页面移动端应用程序...
- 目前在该仓库中维护有完整的**移动端源码**、**服务器端源码**和**软件设计开发文档**; ---- ## 功能概括 #### 1.「运动监测」 - 实时运动计步,用运动步数进行每日打卡。 - 灵活运动计时,记录自己每天的运动时...
本资源是一个基于Java ME平台开发的俄罗斯方块游戏项目,专为无线网络移动端设备设计,包含了完整的源代码和详细的论文文档。该项目旨在为用户提供一个经典且富有挑战性的游戏体验,同时作为毕业设计或课程设计的...
该系统采用了SpringBoot框架进行开发,提供了良好的用户体验和交互性,让学生可以更加方便地进行课程管理和签到操作。 课程提醒签到APP的主要功能包括课程查询、提醒、签到等。学生可以通过移动设备查询自己的课程...
移动端主要分为安卓(Android)系统和苹果(iOS)系统两大阵营,安卓系统上的应用软件以Java语言为基础进行开发,苹果系统上的应用软件可以使用Objective-C或Swift语言开发。当然随着HTML 5和Hybrid混合模式移动应用...
移动端开发记录 因为接下来有个 H5 的页面要开发,虽说是 H5,但整体比较偏向 WebApp 形式。为了方便接下来的开发工作,于是就花了 3 - 4 天简单的封装了一套适用于项目的架子,并且将过程记录了下来,希望能与大家...
这套HTML源代码文件为您呈现了一个完整的网页模板,适用于各类网站开发需求。它采用了前沿的HTML5和CSS3技术,实现了响应式设计,能够无缝适配各种设备的屏幕尺寸。此外,它还内置了丰富的JavaScript插件,助您轻松...
【技术分析】 ... CSS,可以帮助把网页外观做得更加美观; JavaScript,是一种轻量级的解释型编程语言; ... Bootstrap 是快速开发 Web 应用程序的前端工具包。...日志功能:记录关键操作日志,保留操作痕迹。
系统开发的主要任务是俄罗斯方块游戏在无线移动端的实现。本系统的主要实现功能模块分为:难度选择模块、方块处理模块、游戏规则模块。 4.2.1 难度选择模块 用户在title屏按键数字键选择0-9种游戏难度,进入相对应...
8、日志记录采用aop(LogAop类)方式,可对用户所有操作进行记录 9、引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能 10、引入swagger文档支持,方便编写API接口文档 11、项目采用...
首先代码拆分应该保证本地开发的时候只有一套代码,提取所有公共页面,并且分别提取小程序和app的独立JS方法,避免开发完小程序端vue,然后粘贴复制到App端的繁琐操作。 直接看图最清晰,拆分前目录结构: 拆分后
为BuildMind Team开发的移动端协作工具。 为什么? 此应用程序旨在实现浏览器最终用户体验。 它集成了一些优秀的开源项目。 开源列表 离子框架 - 基础框架 Angular UI - 一些有用的指令 PhoneRTC - 基于 WebRTC 的...