1、火狐(firefox)的mouseenter
问题
{ this.mouseEnter(e,); }} onBlur={() => {}} onMouseLeave={e => { this.mouseOut(e,); }} /> 复制代码
onMouseEnter
事件在火狐上会不断地触发mouseenter
和mouseleave
事件,所以需要先设置一个flag=false
,在onMouseEnter
时设为true
,在onMouseLeave
设为false
,让不断触发的onMouseEnter
事件只触发一次即可
this.state={ flag:false } mouseEnter(){ if(!this.state.flag){ //...do something this.setState({ flag:true, }) } } mouseOut(){ this.setState({ flag:false, }) } 复制代码
2、ESLint Unary operator '++' used
i++
是不安全的,所以用i+=1
//bad for(let i=0;i
3、兼容 ie11之 SVG 的transform
旋转
//非IE可以这样写 svg.style('transform', `rotate(0deg)`) //IE需要这么写 svg.attr('transform',`rotate(0,0 0)`) 复制代码
转到 180 度
//非IE可以这样写 svg.style('transform', `rotate(180)`) //IE需要这么写 svg.attr('transform', `rotate(180,0 0)`) 复制代码
详情请参考:
4、border-block-end
边界块结束border-block-end: 1px solid #d5d5d5; 复制代码
第一次知道这个属性,好像是新边框属性,但兼容性不太好,IE11 不兼容,所以还得改回下面这样:
border-bottom: 1px solid #d5d5d5; 复制代码
5、调整 svg 中<g>
标签的位置
<g>
标签自带的transform
属性 复制代码
6、get
请求中的参数有中文,ie11
无法识别
encodeURI()
方法来识别,也不影响其他浏览器 encodeURI( url ) 复制代码
7、document.activeElement.tagName
返回文档中当前获得焦点的元素console.log(document.activeElement.tagName) 复制代码
(这个我以前记过,但发现工作中很少用到)
8、注意写法,在赋值的同时,判断条件
let a let b=1 if ( ( a = b )!==2 ) { console.log(a,'a28') //1 } 复制代码
9、 网上常能见到的一段 JS 随机数生成算法如下,为什么用 9301, 49297, 233280 这三个数字做基数?
function rnd( seed ){ seed = ( seed * 9301 + 49297 ) % 233280; //为何使用这三个数? return seed / ( 233280.0 ); }; function rand(number){ today = new Date(); seed = today.getTime(); return Math.ceil( rnd( seed ) * number ); }; myNum=(rand(5)); 复制代码
简单说,是3点原因:
(1)c与m互质
(2)a - 1可以被m的所有质因数整除(3)如果m是4的倍数,a - 1也必须是4的倍数以上三条被称为Hull-Dobell
定理。可以看到,a=9301, c = 49297, m = 233280这组参数,以上三条全部满足。 详情请参考:
10、浏览器类别判断 window.navigator.userAgent
console.log(window.navigator.userAgent,'userAgent67') 复制代码
360安全浏览器:
const is360=window.navigator.userAgent.indexOf("WOW64")!==-1 复制代码
Edge:
const isEdge = window.navigator.userAgent.indexOf('Edge') !== -1; 复制代码
IE11:
const isMs = window.navigator.userAgent.indexOf('.NET') !== -1; 复制代码
(完)