随着移动设备的普及,移动互联网也变得越来越重要。移动端的产品的体验也变得非常重要了,这里就谈一下移动端一些事件。
移动端的手势事件
移动端的手势事件主要有下面 4 个。
touchstart:当手指放在屏幕上触发,即使已经有手指放在屏幕上也会触发;
touchmove:当手指在屏幕上滑动时,连续地触发
touchend:当手指离开屏幕时触发;
touchcancel:当系统停止跟踪时触发,基本用不到;
由于元素的默认事件行为和事件冒泡,也都可以在事件函数内部阻止事件默认行为和事件冒泡。每个 touch 事件对象都包含以下属性:
touches:表示当前跟踪的触摸操作的 Touch 对象的数组;
targetTouches:特定于事件目标的 Touche 对象的数组;
changeTouches:表示自上次触摸以来发生了什么改变 Touch 对象的数组;
还有比较常用的以下属性:
clientX:触摸目标在视口中的 x 坐标;
clientY:触摸目标在视口中的 y 坐标:
identifier:触摸目标的唯一 ID;
pageX:触摸目标在页面中的 x 坐标;
pageY:触摸目标在页面中的 y 坐标;
screenX:触摸目标在屏幕中的 x 坐标;
screenY:触摸目标在屏幕中的 y 坐标;
target:触目的 DOM 节点目标;
三个事件的使用方法如下:
1 | var ele = document.querySelector(selector); |
这里需要注意的是,在 touchend 事件中,发生该事件时,touches 里面没有任何的 touch 对象,需要使用 changeTouches。
手势事件
gesturestart:当一个手指已经按在屏幕上,而另一个手指又触摸在屏幕时触发;
gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发;
gestureend:当任何一个手指从屏幕上面移开时触发。
需要注意的是,只有两个手指都触摸到事件的接收容器时才触发这些手势事件。
触摸事件与手势事件之间的关系
注意:触摸事件目前只支持 IOS 设备
当一个手指放在屏幕上时,会触发 touchstart 事件,如果另一个手指又放在了屏幕上,则会触发 gesturestart 事件,随后触发基于该手指的 touchstart 事件。
如果一个或两个手指在屏幕上滑动,将会触发 gesturechange 事件,但只要有一个手指移开,则会触发 gestureend 事件,紧接着又会触发 toucheend 事件。
手势的专有属性
rotation:表示手指变化引起的旋转角度,负值表示逆时针,正值表示顺时针,从零开始。
scale:表示两个手指之间的距离情况,向内收缩会缩短距离,这个值从 1 开始,并随距离拉大而增长。
屏幕旋转事件(onorientationchange)
1 | var orientationChange = function () { |
其他常见问题
判断设备平台
1 | var judgePlatform = function () { |
禁止 IOS 弹出操作窗口
1 | style: "-webkit-touch-callout:none"; |
IOS 系统,中文输入法输入英文时,字母之间有六分之一个空格
1 | this.value = this.value.replace(/\u2006/g, ""); |
IOS 系统,contenteditable 为 true,不可输入编辑
1 | style: "-webkit-user-select:text"; |
禁止用户选中文字
1 | style: "-webkit-user-select:none"; |
Andriod 去掉语音输入按钮
1 | input::-webkit-input-speech-button { |
判断是否为微信浏览器
1 | var is_weixin(){ |
[越努力,越幸运!]