一,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 = "";
switch (true) {
case val >=1 && val <= 3:
answer = "Low";
break;
case val >=4 && val <= 6:
answer = "Mid";
break;
case val >=7 && val <= 9:
answer = "High";
break;
}
return answer;
}
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