总结

作者: fenerchen | 来源:发表于2018-04-18 22:43 被阅读2次

1、各种排序算法思想及代码的实现
2、flex布局全方位掌握,对于不兼容浏览器该怎么处理。
3、验证登录密码的等级
4、304状态码,如何读取缓存
5、jsonp实现
6、防止重复点击

验证登录密码的等级

思路:使用正则表达式
先来了解一下环视
(?=Expression):顺序肯定环视,表示所在位置右侧能够匹配Expression
(?!Expression)顺序否定环视,表示所在位置右侧不能匹配Expression
var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");表示从头匹配到尾,全局匹配。所匹配的字符串的后面要有8个以上不包括换行符的任意字符,要有大小写字符、数字、和非字母数字下划线的特殊字符。简而言之就是匹配字母、数字和特殊字符串至少8个。缺一条件就不满足。
也可以写成var strongRegex = new RegExp("^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).{8,}$", "g");必须匹配字母数字特殊字符至少8个。

var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
var s='13wrgfSD@';
console.log(strongRegex.test(s));//true

使用变量方式来定义正则表达式console.log(strongRegex.test(s));就不对了,返回false。具体什么原因我也不清楚。
监听密码输入框的keyup事件,匹配密码等级,并做响应处理

//html
<input type="password" name="pass" id="pass" />
<span id="passstrength"></span>
//js
$('#pass').keyup(function(e) {
 var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
 var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
 var enoughRegex = new RegExp("(?=.{6,}).*", "g");
 if (false == enoughRegex.test($(this).val())) {
 $('#passstrength').html('More Characters');
 } else if (strongRegex.test($(this).val())) {
 $('#passstrength').className = 'ok';
 $('#passstrength').html('Strong!');
 } else if (mediumRegex.test($(this).val())) {
 $('#passstrength').className = 'alert';
 $('#passstrength').html('Medium!');
 } else {
 $('#passstrength').className = 'error';
 $('#passstrength').html('Weak!');
 }
 return true;
});

flex浏览器兼容,问题参考博文

向后兼容,使用老版本flex,对于容器加上display:box,display:flex-box,以及使用浏览器兼容的前缀例如:dispaly:-webkit-flex

//替换类名
/* 定义 */
.flex-def {
    display: -webkit-box; /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */
    display: -moz-box; /* 老版本语法: Firefox (buggy) */
    display: -ms-flexbox; /* 混合版本语法: IE 10 */
    display: -webkit-flex; /* 新版本语法: Chrome 21+ */
    display: flex; /* 新版本语法: Opera 12.1, Firefox 22+ */
}

/* 主轴居中 */
.flex-zCenter {
    -webkit-box-pack: center;
    -moz-justify-content: center;
    -webkit-justify-content: center;
    justify-content: center;
}

/* 主轴两端对齐 */
.flex-zBetween {
    -webkit-box-pack: justify;
    -moz-justify-content: space-between;
    -webkit-justify-content: space-between;
    justify-content: space-between;
}

/* 主轴end对齐 */
.flex-zEnd {
    -webkit-box-pack: end;
    -moz-justify-content: flex-end;
    -webkit-justify-content: flex-end;
    justify-content: flex-end;
}

/* 主轴start对齐 */
.flex-zStart {
    -webkit-box-pack: start;
    -moz-justify-content: start;
    -webkit-justify-content: start;
    justify-content: start;
}

/* 侧轴居中 */
.flex-cCenter {
    -webkit-box-align: center;
    -moz-align-items: center;
    -webkit-align-items: center;
    align-items: center;
}

/* 侧轴start对齐 */
.flex-cStart {
    -webkit-box-align: start;
    -moz-align-items: start;
    -webkit-align-items: start;
    align-items: start;
}

/* 侧轴底部对齐 */
.flex-cEnd {
    -webkit-box-align: end;
    -moz-align-items: flex-end;
    -webkit-align-items: flex-end;
    align-items: flex-end;
}

/* 侧轴文本基线对齐 */
.flex-cBaseline {
    -webkit-box-align: baseline;
    -moz-align-items: baseline;
    -webkit-align-items: baseline;
    align-items: baseline;
}

/* 侧轴上下对齐并铺满 */
.flex-cStretch {
    -webkit-box-align: stretch;
    -moz-align-items: stretch;
    -webkit-align-items: stretch;
    align-items: stretch;
}

/* 主轴从上到下 */
.flex-zTopBottom {
    -webkit-box-direction: normal;
    -webkit-box-orient: vertical;
    -moz-flex-direction: column;
    -webkit-flex-direction: column;
    flex-direction: column;
}

/* 主轴从下到上 */
.flex-zBottomTop {
    -webkit-box-pack: end;
    -webkit-box-direction: reverse;
    -webkit-box-orient: vertical;
    -moz-flex-direction: column-reverse;
    -webkit-flex-direction: column-reverse;
    flex-direction: column-reverse;
}

/* 主轴从左到右 */
.flex-zLeftRight {
    -webkit-box-direction: normal;
    -webkit-box-orient: horizontal;
    -moz-flex-direction: row;
    -webkit-flex-direction: row;
    flex-direction: row;
}

/* 主轴从右到左 */
.flex-zRightLeft {
    -webkit-box-pack: end;
    -webkit-box-direction: reverse;
    -webkit-box-orient: horizontal;
    -moz-flex-direction: row-reverse;
    -webkit-flex-direction: row-reverse;
    flex-direction: row-reverse;
}

/* 是否允许子元素伸缩 */
.flex-item {
    -webkit-box-flex: 1.0;
    -moz-flex-grow: 1;
    -webkit-flex-grow: 1;
    flex-grow: 1;
}
/* 子元素的显示次序 */
.flex-order{
    -webkit-box-ordinal-group: 1;
    -moz-order: 1;
    -webkit-order: 1;
    order: 1;
}

jsonp

JSONP是JSON with padding 的简写,是应用JSON的一种新方法,在后来的web服务中心非常流行。JSONP看起来与JSON差不多,只不过是被包含在回调函数中的json。例如callback({"name":"hh"})
JSONP由两部分组成,回调函数和数据。回调函数是响应到来时应该在页面中调用的函数。回调函数的名字一般在请求中指定。而数据就是传入回调函数的json数据,由服务器给出。栗子,JSONP请求:
https://freegeoip.net/json/?callback=handleResponse
JSONP是通过动态<script>元素来使用的,使用时可以为src属性指定一个跨域URL。因为JSONP是有效的JavaScript代码,所以在请求完成后,即在JSONP响应加载到页面中以后,就会立即执行。上栗子:

//js
function handleResponse(res){
console.log(res);
console.log(res.ip);
}
var script=document.createElement('script');
script.src="https://freegeoip.net/json/?callback=handleResponse";
document.body.insertBefore(script,document.body.firstChild);

当页面加载后控制台输出:


object展开

jsonp优点
  • 能够直接访问响应文本
  • 支持在浏览器与服务器之间的双向通信
    jsonp缺点
  • jsonp从其他域加载代码执行,如果其他域不安全,会在响应中携带恶意代码,安全性差
  • 要确定jsonp请求失败不大容易,可以使用H5的onerror事件处理程序,但是浏览器支持行不广泛。或者使用计时器检测指定时间内是否得到了响应。但是毕竟不是每个用户的上网速度和宽度都是一样的

防止短时间重复点击

对于可以设置点击禁用,然后过一段时间取消禁用。也可以设置一个标志,为真时执行,并且改变标志状态,过一段时间恢复
setTimeout(fn,t)fn中的this指向window

//表单,非表单也可以,相当于定义一个属性和设置标志道理相同
var btn = document.getElementById('btn');
btn.onclick = function() {
    if (!this.disabled) {
        this.disabled = 'true';
    }
    var that = this;
    setTimeout(function() {
        that.removeAttribute('disabled')
        // console.log(this) window
    }, 1000)
}
var div = document.getElementById('btn');
var f=true;
div.onclick = function() {
    if (f) {
        f = false;
    }
    var that = this;
    setTimeout(function() {
        f=true;
        // console.log(this) window
    }, 1000)
}

相关文章

网友评论

    本文标题:总结

    本文链接:https://www.haomeiwen.com/subject/utdrkftx.html