事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。
好处:
在JavaScript中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能,因为需要不断的与dom节点进行交互,访问dom的次数越多,引起浏览器重绘与重排的次数也就越多,就会延长整个页面的交互就绪时间,提高性能; 使用场景
给 ul 的1000个li注册点击事件,普通做法是循环给每个li添加,
事件委托利用事件对象的 target 来找到当前点击的 li,因为点击 li,事件会冒泡到 ul 上, ul 有注册事件,就会触发事件监听器。
<ul id="myLinks"> <li id="goSomewhere">Go somewhere</li> <li id="doSomething">Do something</li> <li id="sayHi">Say hi</li> </ul> var item1 = document.getElementById("goSomewhere"); var item2 = document.getElementById("doSomething"); var item3 = document.getElementById("sayHi"); document.addEventListener("click", function (event) { var target = event.target; switch (target.id) { case "doSomething": document.title = "事件委托"; break; case "goSomewhere": location.href = "http://www.baidu.com"; break; case "sayHi": alert("hi"); break; } })(!important)> id选择器> class选择器(属性选择器/伪类选择器)> 标签选择器(伪元素选择器) 同类选择符条件下层级越多的优先级越高。 优先级就近原则,同权重情况下样式定义最近者为准。载入样式以最后载入的定位为准。
关于CSS权重,我们需要一套计算公式来去计算,这个就是 CSS Specificity(特殊性)
标签选择器计算权重公式继承或者 *(通配符选择器)0,0,0,0每个元素(标签选择器)p等0,0,0,1每个类,伪类 .0,0,1,0每个ID #0,1,0,0每个行内样式 style=""1,0,0,0每个!important 重要的∞ 无穷大继承的权重是0
1)background:rgba(0,0,0,0.3)
2)opacity属性参数的"不透明度"是以数字表示,从 0.0 至 1.0 都可以,完全透明是 0.0,完全不透明是 1.0,换句话说,数字越大代表元素越不透明。不过浏览器支援度较差,不建议使用。
visibility性能比display好,因为display:none隐藏元素时,页面会发生回流。
1)position定位(宽度高度已知):
.parent { position: relative; height: 50px; wight:50px; } .child { position: absolute; top: 50%; left: 50%; margin-left: -25px; margin-top: -25px; }2)position + transform(有无宽高都试用):
.parent{ position: relative; height: 200px; background-color: black; } .child{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: rebeccapurple; }3)flex布局:
.parent { display: flex; justify-content: center; align-items: center; }