网上搜索的看着都蛋疼。实现的太复杂,故精简如下:

1
2
3
4
5
6
7
8
9
10
11
function checkBankCard(cardNo) {
var tmp = true,
total = 0
for (var i = cardNo.length; i > 0; i--) {
var num = cardNo.substring(i, i - 1)
if (((tmp = !tmp), tmp)) num = num * 2
var gw = num % 10
total += gw + (num - gw) / 10
}
return total % 10 == 0
}

哈喽,前端的小伙伴们!在聊今天的 IE 兼容之前,还是先跟我一起问候下(日了)ie 的所有版本吧!

在现代浏览器中,对表单元素的输入监听一般是通过监听”input”事件来实现,但坑爹的是 ie8 及之前的版本是不支持这个事件的,基本会使用它的替代品——“propertychange”来模拟这个事件,但模拟总归是模拟,如下是我总结的它们之间的最大区别

某天上班,偶然打开网页版的喜马拉雅,随手点了首推荐音频。。。于是伴随着动词大词,动词大词,继续逛着它的首页。

一个不小心,又点进了老郭的相声,哎,还是木有更新,不过老段子也可以再听听,正当老夫要点播的时候,突然!哎呀!卧槽!卧槽!牛逼啊!我都逛了这么多页面了,耳机里的”动词大词”竟然连顿都没打,当时还打开了一下本地播放器,以为是它播放的音乐。

详细情形是这样的:我在喜马拉雅的 a 页面播放了音乐,然后又去 b 页面,c 页面,音乐却并没有卡顿现象,稳如死狗!注意,这里说的是连卡顿都没有,不是说跳到别的页面会继续播放。

国内的在线音乐平台有很多,实现喜马拉雅的这种哥还是头一回见啊。大部分都是采取的本地缓存音乐进度,跳到别的页面再读取进度,继续播放,但切页面的时候肯定是会有卡顿的。所以这里给喜马拉雅的用户体验 32 个赞!

那么问题来了,这种网页播放器是如何实现的?

用于在 ie8 上兼容原生 js 各种新特性,引入它就无须修改现有 js 代码。 项目地址

特性

  1. 解决 ie8 在非调试模式下,调用 console 相关方法的出错情况
  2. 数组类型的变量支持 indexOf 方法
  3. 支持 forEach 方法遍历对象
  4. 可在页面中直接通过 HTMLElement,HTMLDocument 等扩展原型链

市面上目前最完美的 placeholder, 没有之一!和原生几乎没有任何区别。 项目地址

使用

1
2
3
4
5
6
<head>
<!--[if IE 8]>
<script src="https://cdn.jsdelivr.net/gh/aweiu/JsLibs/libs/js/fixJsForIE8.js"></script>
<script src="https://cdn.jsdelivr.net/gh/aweiu/JsLibs/libs/js/placeholder.js"></script>
<![endif]-->
</head>

sea.js 模块加载器 —— seajs 前端开发解决方案。 项目地址

介绍

主要是受够了市面上的各种包管理工具,干个屁大点事儿就得写一堆配置!还有,我也不知道国内现在做技术的是什么风气,就喜欢把 API 文档写得云里雾里的,能愣是把一段中文说得像是从英文翻译过来的。聊点框架,设计模式的能说得跟玄学似的,感觉不会再爱了。。

其中有个最让我印象深刻的博客,说 xxx 框架底层使用当前性能最高的 Vanilla 编写,哥当时就不淡定了,Vanilla?卧槽,这是个啥玩意?瞬间感觉自己文化水平太低,于是百度了半天。。Vanilla 这货翻译过来就是原生 js!CNM!

最后再吐槽一下 seajs 官方推荐的包管理工具,spm,现在好像下架了,叫什么蚂蚁脚手架(哥翻译的)。作为 seajs 的亲爹,每个模块的依赖竟然还得手动地去配置文件里一个个地写,给自动分析下依赖会死吗?其它包管理工具就算了,你作为亲爸爸,你生成的那种目录结构,有没有考虑过洁癖症的感受?

ok,吐槽完毕!(一般,要发布个新东西之前首先要做的就是先喷一下老的,这是礼节!)