移动端交互优化

1、移动web页面上click事件响应有300ms延迟

原因:移动设备访问的web页面都是PC上的页面。在默认viewport(980px)的页面往往需要“双击”或“捏开”放大页面。而正是为了确认用户是“双击”还是“单击”。

safari 需要300ms 的延迟来判断。而后来的iphone,android也沿用这样的设计。

举例:如果你点击一下,在300ms内再点击第二次就认为是双击事件。

1.1) 如何解决?

利用tap事件代替click

自定义tap事件原理:

在touchstart、touchend时记录时间、手指位置,在touchend时进行比较,如果手机位置为同一位置(或允许移动一个非常熊德位移值)且时间间隔较短(一般认为是200ms)

过程中未曾触发过touchmove。即可认为触发了手持设备上的“click”,一般称它为“tap”.(一般使用zepto.js框架)

1.2)问题: Tap “点透”的bug;描述: 点击按钮最上面的蒙层,但是蒙层下的按钮也会触发。

点透发生过程:  touchstart , touchend蒙层消失, 此时由于300ms导致下面的click触发

关于tap 穿透的解决方案:

①使用缓动动画,过渡300ms的延迟。

② 中间层dom元素的加入,让中间接受这个“穿透”事件

③ “上下”都使用tap事件,原理上解决tap 透传事件(但不可避免原生标签的click事件)

④ 改用fastclick的库(听过最新的zepto已经fixed掉这个bug)

2、tap事件为自定义事件,基于touch基础事件。

2.1)触摸才是移动设备的交互核心事件。

touchstart: 手指触摸屏幕触发(已经有手指放屏幕上不会触发)

touchmove: 手指在屏幕上滑动,连续触发

touchend: 手指离开屏幕时触发

touchcancel:系统取消touch时候触发(不常用)

2.2)除了常见的事件属性外,触摸事件包含专有的触摸属性。

touches: 跟踪触摸操作的touch对象数组。

targetTouches: 特定事件目标的touch对象数组;

changeTouches: 上次触摸改变的touch 对象数组

2.3)每个touch对象包含属性--根据touch对象跟踪触摸具体位置,从而判断触摸交互或手势事件

clientX: 触摸目标在视口中的X坐标,clientY

pageX: 触摸目标在页面中的X坐标(包含滚动),pageY

screenX:触摸目标在屏幕中的X坐标,screenY

target: 触摸的DOM节点目标

identifier: 标识触摸的唯一ID

2.4) Android 4.0,4.1,4.4只会触发一次touchstart,一次touchmove,touchend不触发

解决方案: 在touchmove中加入:event.preventDefault()---------touchmove多次触发,touchend 结束触发

导致问题: 默认行为不发生,如:scroll,导致页面不滚动

2.5)常用touch相关的交互效果

① 弹性滚动

当客户端的页面滚动到顶部或底部时候,滚动条会收缩并让我们多滑动一定距离。通过缓冲反弹的效果,带给用户良好的体验。

但滚动有几种情况:

1、body层滚动:自带弹性滚动,overflow: hidden 失效,gif和定时器暂停

2、局部滚动:没有弹性滚动,没有滚动惯性,不流畅

如何开启?  body { overflow: scroll;-webkit-overflow-scrolling: touch; }

注意: Android不支持原生的弹性滚动,但是可以借助第三方库iScroll来实现

② 下拉刷新

③ 上拉加载:使用scroll事件,而不是touch事件

原文地址:https://www.cnblogs.com/sunqq/p/8323809.html

时间: 2024-10-06 16:33:15

移动端交互优化的相关文章

开发眼中的一些前端交互优化

一.移动web开发与PCweb开发有哪些不同? 首先一点就是性能:手机端的性能,要求更高: M中有很多meta标签:V中的css有很多屏幕适配:C中的交互优化与性能优化: 交互优化与性能优化的差别 系统真的快于用户感觉很快,是两码事:交互优化是更多的根据用户的实际感受来优化. 1. 交互优化 – 点击事件 如下场景:延时,卡顿: 根本原因:默认点击有300ms延迟:有很多pc网页没有做移动端分辨率兼容,需要放大缩小来浏览,则简单暴力用双击300ms以内来决定放大缩小.所以单击的时候会有延迟 移动

基于socket简易版客户端,服务端交互

简易版客户端服务端交互 常识 AF_UNIX 是基于文件类型的套接字家族 AF_INET是 基础网络类型的套接字家族 socket 模块属性很多,可以直接使用from module import *语句 ,这样socket所有的数据都被带劲命名空间里了. 减少代码量(少用) 服务端 #1导入 import socket # 2.获取套接字 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #3绑定 s.bind(('127.0.0.1',807

cas sso单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

转:http://blog.csdn.net/ae6623/article/details/8848107 1)PPT流程图:ppt下载:http://pan.baidu.com/s/1o7KIlom 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的不严谨,画的比较通俗了...因该像下面这张图一样就ok了!!PPT自己下载下来修改吧,我就不改了. 二.用户第一次访问we

Vijos1834 NOI2005 瑰丽华尔兹 动态规划 单调双端队列优化

设dp[t][x][y]表示处理完前t个时间段,钢琴停留在(x,y)处,最多可以走多少个格子 转移时只需逆着当前倾斜的方向统计len个格子(len为时间区间的长度,len=t-s+1),如果遇到障碍就中断 转移过程可以用单调非递增的双端队列优化 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 const int maxN=202; 6 const int inf=0x3f3f3f3f

T端mysql优化设置

下面是一个我自己用的设置MYSQL的安全的魔兽世界私服的单机设置办法.这个是针对2-4G内存来设置的.提升MYSQL的吞吐量.实现MYSQL的稳定,让多人在游戏里面玩的时候不至于由于MYSQL而导致很卡[client] port=3306 [mysqld] port=3306 old-passwords=1 basedir="D:\MGCORE-4.1.0-V1.2.1-14007\Web_Mysql\mysql5/" datadir="D:\MGCORE-4.1.0-V1.

移动端网站优化指南-WAP篇

转载:http://seofangfa.com/mobile-seo/mobile-seo-guide.html 1.域名优化:启用短域名,例如:m.abc.com,便于用户记忆,方便搜索蜘蛛查找,减少资源的浪费. 2.页面及适配优化:运用xhtml.html5.wml等技术.做好网页对设备适配,并且针对PC端网站做响应式设计开发,不同的网站适配不同的机型,并且用302重定向到相对应的机型.对不同的移动端网页做好适配声明,大型网站建议自己来做适配.http://zhanzhang.baidu.c

Android WebView与服务端交互Demo

使用WebView可以让Android端的开发工作大量减少,原因是在服务端可以为其做一定的工作,下面这个小Demo就实现了从Android客户端与服务端的交互.我这里客户端使用的工具是Eclipse,服务端使用MyEclipse. 实现效果图: 客户端: 点击登录按钮后,页面跳转,而在服务端Console中看到如下(只看最后一行即可): 可以看到服务端收到了客户端发过来的用户名:yao. 源代码: 客户端: activity_main: <RelativeLayout xmlns:android

base64编码及JNI实现,代码非原创,只做整理和实现JNI端交互

直接上代码: #include <stdlib.h> #include <stdio.h> #include <getopt.h> #include <string.h> #include "base64.h" extern "C" { //Base64 编码 int Base64Encode(unsigned char *OrgString, unsigned char *Base64String, int OrgS

poj 3259 Wormholes spfa : 双端队列优化 判负环 O(k*E)

1 /** 2 problem: http://poj.org/problem?id=3259 3 spfa判负环: 4 当有个点被松弛了n次,则这个点必定为负环中的一个点(n为点的个数) 5 spfa双端队列优化: 6 维护队列使其dist小的点优先处理 7 **/ 8 #include<stdio.h> 9 #include<deque> 10 #include<algorithm> 11 using namespace std; 12 13 class Graph