踩过的坑点[持续更新中...]

153 阅读3分钟

一,html相关


1,div等普通标签设置keyup等键盘事件

keyup等键盘事件一般只有输入框和body有;普通标签如div可通过给其设置tabindex属性让其能监听keyup等键盘事件。

2, 页面有图片时,渲染完后还会再去请求图片;所以图片可能会比数据晚渲染完成

问题:图片请求回来渲染完成后,可能会撑开高度,导致给用户内容有抖动的感觉。
解决方案:给图片的父元素设置min-height【为图片设置的高度或最大高度】

3,input限制上传文件类型: accept属性

二,css相关

1, 页面点击穿透:

point-event:none;

2, css取消某个样式属性的设置:unset

.dropdown-menu{
    min-width: unset;
}

3, 修改复选框默认样式:-webkit-appearance: none;【设置后就可以自定义样式了】

 #grid_view_box input.cbox{
    -webkit-appearance: none;
    color: #fff;
    line-height: 16px;
    width: 16px;
    height: 17px;
    border: 1px solid #d3d3d3;
    border-radius: 3px;
}
#grid_view_box input.cbox:checked{
    position: relative;
    background: #278cde;
    border-color: #278cde;
}
#grid_view_box input.cbox:checked::before{
    content: '\00a0';
    display: inline-block;
    border: 3px solid #fff;
    border-top-width: 0;
    border-right-width: 0;
    width: 11px;
    height: 7px;
    transform: rotate(-50deg);
    position: absolute;
    top: 3px;
    left: 2px;
}

4, 可直接用属性选择器写样式

.grid-caption [data-dblclick]{
    user-select: none;
    cursor: crosshair;
}

5, 使用position: fixed没有效果

他的上层元素有的使用了transform: translate(0, 0);
fixed定位的元素,如果父级有transform样式,值不为none,那么fixed定位就会失效。
解决方法:使用transform样式的元素,不要包含fixed定位的子元素。

三,js相关

1, 将某数据平分多个时,注意余数无尽(.3333333333)取位数后,再累加可能和某数据不相等。

解决方案:取原数和累加和的差,加在最后一个平分数上。

2, input输入框失焦校验

用change事件监听input输入框数据校验时;有时还可结合mouseleave/mouseout事件主动触发其blur事件;使其一移出输入框就触发校验。

3,避免if多层嵌套:活用函数return的特性;switch case结合布尔值使用表达式匹配

function myTest(val) {
var answer = "";
// Only change code below this line
switch (true) {
    case val >=1 && val <= 3:
        // code
        answer = "Low";
        break;
    case val >=4 && val <= 6:
        // code
        answer = "Mid";
        break;
    case val >=7 && val <= 9:
        // code
        answer = "High";
        break;
}
// Only change code above this line
return answer;
}
// Change this value to test
myTest(1);

4, url传参传对象encodeURIComponent(JSON.stringify())配合JSON.parse(decodeURIComponent())

let query='searchParams='+encodeURIComponent(JSON.stringify(data))
JSON.parse(decodeURIComponent(hasHash.split('searchParams=')[1]))

四,其它

1, 任务队列发多请求

在chrome, http的环境下,浏览器只能并发请求7,8个,多余的需要等待之前的请求完成,期间再发起任何请求都会被挂起等待。
一对多有种风险就是20个文件里有1个文件失败就等于整个请求失败了。
解决:做任务队列,每次并发7-8个就可以了,做完一批在并发下一批,未执行到的可以处于等待执行状态。

2, new Date("2018-03-01") 在苹果端企业微信是不识别

使用yyyy/mm/dd