帖子
帖子
用户
博客
课程
显示全部楼层
84
帖子
2
勋章
1486
Y币

【小草百科】移动开发JS篇

[复制链接]
发表于 2017-11-29 19:05:05
# 【小草百科】移动开发JS

## 移动端click屏幕产生200-300ms的延迟响应

移动设备上的web网页是有300ms延迟的,往往会造成按钮点击延迟甚至是点击失效。

### 解决方案

* fastclick可以解决在手机上点击事件的300ms延迟
* zepto的touch模块,tap事件也是为了解决在click的延迟问题
* hammer的tap事件
* APICloud官方自带的tapmode

## 移动端touch事件(区分webkit winphone)

当用户手指放在移动设备在屏幕上滑动会触发的touch事件, 触摸事件的响应顺序

```
ontouchstart --> ontouchmove --> ontouchend --> onclick
```

### 以下支持webkit

* touchstart——当手指触碰屏幕时候发生。不管当前有多少只手指
* touchmove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用event的preventDefault()可以阻止默认情况的发生:阻止页面滚动
* touchend——当手指离开屏幕时触发
* touchcancel——系统停止跟踪触摸时候会触发。例如在触摸过程中突然页面alert()一个提示框,此时会触发该事件,这个事件比较少用

### 以下支持winphone

* MSPointerDown——当手指触碰屏幕时候发生。不管当前有多少只手指
* MSPointerMove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用css的html{-ms-touch-action: none;}可以阻止默认情况的发生:阻止页面滚动
* MSPointerUp——当手指离开屏幕时触发

## 屏幕旋转的事件

window.orientation,取值:正负90表示横屏模式、0和180表现为竖屏模式;

```
window.onorientationchange = function() {
  
    switch (window.orientation) {
      
        case -90:
        case 90:
            alert("横屏:" + window.orientation);
      
        case 0:
        case 180:
            alert("竖屏:" + window.orientation);
      
            break;
  
    }
}
```

## 常用的正则表达式

```
信用卡
[0-9]{13,16}
银联卡
^62[0-5]\d{13,16}$
Visa
^4[0-9]{12}(?:[0-9]{3})?$
万事达:
^5[1-5][0-9]{14}$
QQ号码:
[1-9][0-9]{4,14}
手机号码:
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
身份证:
^([0-9]){7,18}(x|X)?$
密码:
^[a-zA-Z]\w{5,17}$ 字母开头,长度在6~18之间,只能包含字母、数字和下划线
强密码:
^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$ 包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间
7个汉字或14个字符:
^[\u4e00-\u9fa5]{1,7}$|^[\dA-Za-z_]{1,14}$
```

## 校验机动车识别代码(Vin)

```
// checkVin.js
// desc: 检验车辆识别代码(VIN)
// auth: promeyang
// time: 2017-11-09 13:35:33
// test: JF1SH52F6AG152654
// use: checkVin('JF1SH52F6AG152654')

function checkVin(code) {
    if (!code || code.length !== 17) return false;
    if (/[IOQ]/i.test(code)) return false;
    // 转换大写, 并生成字符数组, 等待计算
    var list = code.toUpperCase().split('');
    // VIN码对照值
    var matchCode = {
        "0": 0,
        "1": 1,
        "2": 2,
        "3": 3,
        "4": 4,
        "5": 5,
        "6": 6,
        "7": 7,
        "8": 8,
        "9": 9,
        "A": 1,
        "B": 2,
        "C": 3,
        "D": 4,
        "E": 5,
        "F": 6,
        "G": 7,
        "H": 8,
        "J": 1,
        "K": 2,
        "L": 3,
        "M": 4,
        "N": 5,
        "P": 7,
        "R": 9,
        "S": 2,
        "T": 3,
        "U": 4,
        "V": 5,
        "W": 6,
        "X": 7,
        "Y": 8,
        "Z": 9
    };
    // VIN码加权值
    var matchValue = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];
    // 校验值
    var checkCode = list[8];
    // 加权总和
    var countCode = 0;
    // 结果值
    var resultCode = null;
    // 计算加权总和
    for (var i = 0; i < list.length; i++) {
        var _code = list;
        // console.log(_code, matchCode[_code], matchValue, matchCode[_code] * matchValue);
        countCode += matchCode[_code] * matchValue;
    }
    // console.log(checkCode, countCode, countCode % 11);
    if (countCode % 11 === 10) resultCode = 'X';
    else resultCode = '' + (countCode % 11);
    // 返回校验结果
    return checkCode === resultCode;
}
```

## 常见问题

* 待续...




4
帖子
1
勋章
164
Y币
感谢分享,先收藏
27
帖子
0
勋章
143
Y币
ontouchstart --> ontouchmove --> ontouchend --> 我在api里没发现啊
84
帖子
2
勋章
1486
Y币
MCU_涛 发表于 2017-11-30 10:41
ontouchstart --> ontouchmove --> ontouchend --> 我在api里没发现啊

这个是原生js的触摸事件, 不是api中的
3
帖子
1
勋章
408
Y币
感谢小草版主的分享
9
帖子
0
勋章
25
Y币
谢谢分享的
34
帖子
5
勋章
2995
Y币
帅了
2
帖子
0
勋章
1170
Y币
非常感谢
您需要登录后才可以回帖 登录

本版积分规则