图标库
  • 部分Android Webkit上的事件响应BUG,以及交互解决方案

    最近在项目过程中,发现了部分Android手机的Webkit对scroll、touch事件响应存在一些问题。而针对这些棘手的问题,我们的交互方案又该如何应对?在这里将一些心得分享给大家。


    场景

    滚动加载。用户用触屏设备滚动一个列表页面,在滚动到页面底部时,通过异步请求动态加载数据,再滚再读,如此往复循环。而在实际的测试中,发现部分Android手机Webkit并没有正常响应事件。而用轨迹球滚动时却没有这个问题。

    兼容性测试

    对这个问题,我做了一个Demo并有针对性地观察事件响应的状况。Demo地址:http://www.smbey0nd.com/demo/lab/eventbug/demo.html

    测试方法:用Android手机打开该页面,向上向下来回滚动,查看“时间触发记录”,看是否每次都有scroll的记录。

    在Demo页面中,共监听了4个事件:onscroll、ontouchstart、ontouchmove、ontouchend。我动用了我所能拿到的所有设备进行测试,详情如下。

    已测试设备:

    • iPhone 3Gs (iOS 3.1.2)
    • HTC Legend[G6] (Android 2.1update1)
    • HTC Hero[G3] (Android 2.1update1)
    • MOTO XT701 (Android 2.1update1)
    • MOTO XT702[MileStone] (Android 2.1update1)
    • Nexus One (Android 2.2)
    • 索爱X10i (Android 1.6)
    • HTC Magic[G2] (Android 1.6)
    • ZTE R750 (Android 2.1update1)

    出问题设备:

    • HTC Hero[G3] (Android 2.1update1)
    • HTC Legend[G6] (Android 2.1update1)

    BUG描述:

    预期结果是,当用手指触摸滚动页面时,scroll、touchstart、touchmove、touchend都会正常触发。而在用以上两台有问题的设备进行测试时,发现scroll和touchend两个事件并非100%触发,而是不规律的触发。有时在滚动数次之后,scroll和touchend会突然触发N次。有点像积攒了N久突然爆发一样。非常诡异。

    而用轨迹球来滚动页面的话(两台问题设备均有轨迹球),则scroll事件没有问题,是完全100%触发的。

    PS:欢迎参与测试!测试短链接:http://2.ly/cfqj 测试后请留下测试结果,附上 手机型号/系统版本/是否有轨迹球。多谢!

    阅读全文 »

    归类于: Mobile Web, 前端开发 评论: 2 SMbey0nd @ 2010-08-01 下午 11:09
  • [Demo]TouchWeb上的ScrollLayer组件(兼容iOS/Android/PC)

    最近的Android项目中,用ontouch系列事件尝试做了一个ScrollLayer组件(基于jQuery),并做了一下封装。为了PC上观察效果,同时增加onmouse系列事件的支持。具体实现不多说了,大家可以直接查看代码:)

    兼容性:

    兼容iOS(Mobile Safari)/Android(Webkit)/PC(IE除外),其它未考证

    操作方法:

    在所支持的Touch设备上,用手指按住图片区域,然后向右(或向下)华丽丽地一拖,随即松开手指。Yeah~

    调用语法示例:

    $('#J_Gallery').scrollLayer({
        direction:'X', //方向。X代表水平方向,Y代表垂直方向
        wrapEl:'.wrap', //外层容器。用来overflow遮罩的层
        touchEl:'.holder', //touch层容器。用来包裹列表内层元素的层
        childEl:'li', //内层元素。用来放图的层
        margin:5, //间距。以实际元素间距为准
        speed:0.95, //加速度。一般取0.9-1之间
        prevent:true //阻止超链接默认事件
    });

    已知问题&待改进:

    • 个别低配置Android设备上(HTC HERO G3)响应有些迟滞(性能问题?)。
    • 暂没有开发图片自动对准功能。

    更新:

    • 感谢@Chappell提醒,修正onmouseup在拖放范围外释放的BUG(2010-7-19)

    演示:http://www.smbey0nd.com/demo/lab/scrolllayer/demo.html

    下载:http://www.smbey0nd.com/demo/lab/scrolllayer/ScrollLayer.rar

    欢迎大家直接用iOS/Android设备访问短网址:http://2.ly/b9jb 进行测试,如果发现任何问题,请直接留言给我!多谢


    ref:

    归类于: Mobile Web, 前端开发 评论: 1 SMbey0nd @ 2010-07-19 下午 3:00
  • [译]iPhone上的触摸和手势

    拥有iPhone的人一定感觉很欣喜,在这个设备上有那么多好玩的东西可以折腾,特别是那些应用。但是对Web开发者来讲,却是渴望在iPhone上做出更优秀的Web App。这意味着我们需要对鼠标事件进行一些改变。现在我们可以办到了,尽管这些API起初会有些粗糙,可一旦你掌握了要领,你就可以在你的Web App上做一些很疯狂的事情。

    我先来说说iPhone的控制台,因为我发现它在测试时是非常重要的。在Settings-Safari-Developer下,你可以把它打开或关闭。它提供了一些简单的信息,包括错误、警告等。

    当我阅读这份[Apple Developer Connection page]文档之后,虽然它写的很生动和完整,但仍然给我留下了一些细节上的困惑。并且,如果你不是ADC(Apple开发者中心)的会员,看这个文档可能会让你更迷糊。

    清理思路

    Apple给API加了两个新想法:触摸(touch)和手势(gesture)。触摸用来记录你有多少手指放在屏幕上、它们都在哪里、它们在做什么操作以及它们的轨迹。手势来检测你在用两个手指做什么,是否在捏(pinching)、推(pushing)、或是在旋转(rotating)。

    触摸

    当你把一根手指头放在屏幕上时,触摸(touch)事件便被触发了。每当一根新的手指放在屏幕上,就会触发一个新的touchstart事件。而当手指抬起离开屏幕,touchend事件便被触发了。如果在手指接触屏幕后,你又挪动了这根手指,那么触发的是touchmove事件。

    有以下touch事件:

    • touchstart: 手指放在屏幕上时触发
    • touchend: 手指离开屏幕时触发
    • touchmove: 手指在屏幕上移动时触发
    • touchcancel: 系统可以取消touch事件,但我不确定它如何才能触发。我想可能是当你拖放时,接到一个类似短信或者其它事件时,才会触发。但我没有测试成功过。
    node.ontouchstart = function(evt){
     console.log(evt.pageX + "/" + evt.pageY);
     // 哦不! 值都是空的,肯定有BUG
    }

    阅读全文 »

    归类于: Mobile Web, 前端开发 评论: 2 SMbey0nd @ 2010-07-10 下午 11:22
  • 新的起点!Mobile WEB前端开发

    随着通信业、移动设备产业、互联网产业的快速发展,如今我们已经可以明显地感受到,我们身边的移动设备越来越多,越来越智能,价格越来越低,也越来越与我们的生活密不可分。去年底在支付宝做分享时,我曾说过一句“Mobile WEB风暴,即将席卷中国”,现在看来,我们似乎已经开始接受风暴的洗礼了吧。

    Mobile WEB,曾经或者现在,我们或许习惯性地称之为“WAP”,其实叫什么不重要,充其量只是个名字而已——就像Brian Suda在《Introduction to the mobile web》所说的那样——重要的是,我们到底该如何看待它,以及进行哪些思考。如今的“WAP”,早已不是当初只有一些超链接和一个LOGO的WML时代了。在《Mobile Design and Development》一书中,Brian Fling将如今的移动时代称为Mobile 2.0(对应WEB 2.0的叫法),这是个充满了富交互性的智能Mobile WEB时代。在这个时代中,我们利用手中的武器——前端技术,通过不断强大的移动浏览终端,可以实现更多精彩的用户体验,可以让手中的移动设备做出更多桌面设备办不到的事情。

    (注意:Mobile 2.0并不同于WAP 2.0。它是指整个移动互联网行业的时代特征,是个广义的叫法。而WAP 1.0主要指WML规范时代、WAP 2.0主要指XHTML-MP规范时代,这种定义是偏技术领域,是相对狭义的)

    与桌面WEB前端开发不同的是,Mobile WEB前端开发需要关注更多更杂的东西,并且技能发展的倾向性也会与前者略有不同。移动设备的种类太多,更新频率也真的太快了,因此相应的内置浏览器也会随之发生变化,这些复杂程度会让人觉得眼花缭乱。而对于第三方浏览器,在不同平台下的表现不尽相同,对WEB规范的支持程度也不相同,并且占有率、版本更新频率也并不稳定,同样充满了很大变数。以上这些问题,都是Mobile WEB前端开发领域特有的,并且是需要不断地研究和探索的。

    阅读全文 »

    归类于: Mobile Web 评论: 9 SMbey0nd @ 2010-06-10 下午 10:56
  • iPhone OS的资源限制

    • GIF、PNG、TIFF最大尺寸上限是300万像素
      也就是说,确保width * height ≤ 3 * 1024 * 1024。
    • JPEG二次采样(颜色压缩)后的最大尺寸上限是3200万像素
    • canvas元素的最大尺寸上限是3百万像素
      canvas对象的默认宽高是150 x 300像素
    • 单个资源文件必须小于10MB
      适用于HTML、CSS、JavaScript、非流格式媒体
    • JavaScript执行时间限制在10秒之内。
      如果脚本执行时间超过10秒的话,Safari会在一个随机位置强制停止执行,可能会导致意想不到的后果。
    • 一次性打开最多的页面数量是8个(慎用Framesets)
    • iPhone OS 1.1.4以下版本中,JavaScript执行时间限制在5秒内,大小限制在10MB内。Canvas元素的限制跟桌面Safari一致。
    • iPhone OS 2.2.1以下版本中,所有frames的总数之和需要小于200万像素,也就是说,frames的宽x高x数量≤1024x1024x2。
    • iPhone OS 3.0以上版本中,该限制变更为单个的frame上。

    ref:Safari Web Content Guide

    归类于: Mobile Web 评论: 1 SMbey0nd @ 2010-04-12 下午 9:58

关于SMbey0nd

Avatar of SMbey0nd SMbey0nd
F2EDevigner 83/07/03
USE.com.cn|TaobaoUED
hangzhou china
我爱花夏小小
折叠 图标库