前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端小知识10点(2019.5.27)

前端小知识10点(2019.5.27)

作者头像
进击的小进进
发布2022-03-28 15:05:10
5690
发布2022-03-28 15:05:10
举报

1、火狐(firefox)的mouseenter问题

代码语言:javascript
复制
<MyIcon
      onMouseEnter={e => {
          this.mouseEnter(e,);
       }}
       onBlur={() => {}}
       onMouseLeave={e => {
          this.mouseOut(e,);
       }}
/>

onMouseEnter事件在火狐上会不断地触发mouseentermouseleave事件,所以需要先设置一个flag=false,在onMouseEnter时设为true,在onMouseLeave设为false,让不断触发的onMouseEnter事件只触发一次即可

代码语言:javascript
复制
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

代码语言:javascript
复制
//bad
for(let i=0;i<a.length;i++)

//good
for(let i=0;i<a.length;i+=1)

3、兼容 ie11之 SVG 的transform旋转 从 0 度

代码语言:javascript
复制
//非IE可以这样写
svg.style('transform', `rotate(0deg)`)
//IE需要这么写
svg.attr('transform',`rotate(0,0 0)`)

转到 180 度

代码语言:javascript
复制
//非IE可以这样写
svg.style('transform', `rotate(180)`)
//IE需要这么写
svg.attr('transform',  `rotate(180,0 0)`)

详情请参考:https://www.zhangxinxu.com/wordpress/2015/10/understand-svg-transform/

4、border-block-end 边界块结束

代码语言:javascript
复制
border-block-end: 1px solid #d5d5d5;

第一次知道这个属性,好像是新边框属性,但兼容性不太好,IE11 不兼容,所以还得改回下面这样:

代码语言:javascript
复制
border-bottom: 1px solid #d5d5d5;

5、调整 svg 中<g>标签的位置 使用<g>标签自带的transform属性

代码语言:javascript
复制
<g transform={'translate(0 30) scale(1.4)'}>
</g>

6、get请求中的参数有中文,ie11无法识别 使用encodeURI()方法来识别,也不影响其他浏览器

代码语言:javascript
复制
  encodeURI(
        url
    )

7、document.activeElement.tagName 返回文档中当前获得焦点的元素

代码语言:javascript
复制
console.log(document.activeElement.tagName)

(这个我以前记过,但发现工作中很少用到)

8、注意写法,在赋值的同时,判断条件

代码语言:javascript
复制
 let a
 let b=1
 if ( ( a = b )!==2 ) {
   console.log(a,'a28') //1
 }

9、 网上常能见到的一段 JS 随机数生成算法如下,为什么用 9301, 49297, 233280 这三个数字做基数?

代码语言:javascript
复制
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这组参数,以上三条全部满足。

详情请参考:https://www.zhihu.com/question/22818104

10、浏览器类别判断 window.navigator.userAgent

代码语言:javascript
复制
console.log(window.navigator.userAgent,'userAgent67')

360安全浏览器:

代码语言:javascript
复制
 const is360=window.navigator.userAgent.indexOf("WOW64")!==-1

Edge:

代码语言:javascript
复制
const isEdge = window.navigator.userAgent.indexOf('Edge') !== -1;

IE11:

代码语言:javascript
复制
const isMs = window.navigator.userAgent.indexOf('.NET') !== -1;

(完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 webchen 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档