最近抽了一些时间学习了张鑫旭写的《CSS世界》这本书,一个很直观的感受就是这本书写的很系统。里面的知识点解决了我在项目中遇到的一些困惑,因此把一些point记录下来以便日后查看
CSS内部尺寸包裹性
所谓内部尺寸是指元素的尺寸由内部元素来决定,典型的例子就是inline-block
元素。而包裹性是指只要你设置了一个宽度,里面的内容再多,它也不会超出容器设定好的宽度,而是表现为内容换行
首先回顾一下filter的作用:过滤数组中符合条件的元素
1 | let arr = [1, 3, 5, 8] |
另外也可以用来过滤对象数组中符合条件的对象,eg:
1 | let arrObj = [{ |
不跨域情况:
1 | const getParentUrlInIfram = () => { |
跨域情况,无解。只能间接的修改子页面URL模拟修改父页面URL
1 | const getParentUrlInIfram = () => { |
另外,跨域时可获取父页面URL
1 | const getParentUrlInIfram = () => { |
兼容IE8
1 | // time格式为 '2018-08-01或2018/08/01或2018/8/1' |
兼容现代浏览器
1 | // time格式为 '2018-08-01或2018/08/01或2018/8/1' |
浏览器中某些计算和处理要比其他的昂贵的多。例如,DOM操作比起非DOM交互需要更多的内存和cpu时间。连续尝试进行过多的DOM相关操作可能导致浏览器挂起甚至崩溃。尤其是IE中使用onresize事件处理程序的时候容易发生,当调整浏览器大小时,该事件便会频繁触发。在onresize事件处理程序内部如果尝试进行DOM操作,其高频率的更改可能会让浏览器崩溃。为了绕开这个问题,你可以使用定时器对该函数进行节流。
函数节流背后的基本思想是指,某些代码不可以在没有间断的情况连续重复进行。第一次调用函数,创建一个定时器,在指定的时间间隔之后运行代码。当第二次调用该函数时,它将清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换成一个新的计时器。目的是只有在执行函数的请求停止了一段时间之后才执行。
1 | module.exports = { |
1 | <ul id="members"> |
bind()
方法直接在DOM元素中注册事件类型和事件处理函数。虽然它对浏览器的兼容性很好,但是却有很大的性能问题。
1 | $("#members li a").bind( "click", function(e) { |
bind()
方法会匹配所有符合条件的元素附加上事件处理程序,这样做很浪费时间,因为绑定的都是同一个事件处理函数。类似于在原生JS中给每个<li>
绑定onclick事件。