js的一些知识点总结

145 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情

前言

最近看到一些js的知识点,自己总结下,方便后续查阅。

css开启硬件加速

可以通过下面的方式开启


transform: translateZ(0); 

// 或者

transform: translate3d(0, 0, 0);

这个是通过变换的3d效果来开启。

开启了硬件加速后,浏览器会使用GPU来加速,让动画看起来更加流畅。

如果开启后遇到动画有闪烁,可以使用下css来兼容

 backface-visibility: hidden;
 perspective: 800;

backface-visibility是指元素使用3d效果时,背面是否可见。hidden为不可见。

perspective是指元素使用3d效果时,有一定的距离才会有透视效果。设置800,透视效果还可以。none为默认值,没有透视效果。

keep-alive的include和exclude存在同名

使用vue的开发者都知道,vue有keep-alive标签,这个是可以缓存vue组件的,如果你想要切换组件后,之前的组件还保留着数据等等,那么就可以使用keep-alive标签。

它有3个属性,includeexcludemax

include支持字符串或者数组,正则,传入组件的name值,匹配的就会被缓存
exclude支持字符串或者数组,正则,传入组件的name值,匹配的就会不被缓存
max传入数字,最大缓存组件的个数,如果超过就不缓存了。

includeexclude一个是缓存,一个是不被缓存。

如果我对二者提供了同样的组件name值,那会怎么样?哪个优先级更高?

我们可以去源码那里看看

地址:github.com/vuejs/vue/b…

截取部分代码:

image.png

这个条件是判断是否符合缓存的条件,如果不符合,则直接返回虚拟dom,不缓存。

可以看到它先对include判断

如果有include,但是组件没有名字,或者名字不匹配,就不会缓存,直接返回vnode。

如果有include,且有名字匹配上,则继续看exclude属性。如果有名字,且exclude匹配上,则返回vnode,不缓存。

所以如果includeexclude有同样的组件name,它就不会缓存了,exclude优先级更高

keep-alive 生命周期

如果你使用了keep-alive,切换组件时对应的生命周期需要使用activateddeactivated,因为mounted只会执行一次,而beforeDestroy不会执行。

如何阻止a标签的跳转

可以在click事件中添加e.preventDefault()阻止默认事件。这样就阻止a链接的默认行为。

内联元素定位设置absolute

给内联元素的定位设置absolute,它的display会变成block。然后是脱离文档流,形成bfc。float也是一样。