Dom篇——《Vue实战教程》总结

1,199 阅读3分钟

vue实战教程这本书其实还是很不错的,里面用到了很多新的dom知识,以前只是看了高程3,然后其实一直就在用jquery进行大大小小的开发。所以突然看到很多都没见过的dom api难免多少感到很惊讶。下面做一点小小的总结~

  1. Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置

这个其实还是比较实用常见的属性,既可以准确的定位dom元素的位置,还可以知道其大小。

 <body>
    <div style="color: #505c78;background: #ccc;width: 200px; height: 200px; margin: auto;padding: 20px;border: 1px solid #999;" class="test">Store a newly created resource in storage.</div>
    <script>
        var div = document.querySelector('.test');
        divRect = div.getBoundingClientRect();
        console.log(divRect);   // {bottom:250,height:242,left:839,right:1081,top:8,width:242,x:839,y:8}
    </script>
</body>

通过上面的代码,很容易能得到它的各个属性。但是,真正的你会发现,这个topbuttom,leftright并不是简简单单就是这么。看下面的图:

这样就清晰明了了。还有值得注意的就是,widthheight呢是包括 paddingborder的,可是不建议用,因为是行内元素就尴尬了。

  1. getComputedStyle()方法获取元素所有最终使用的CSS值
  • 语法如下:
var style = window.getComputedStyle('元素', '伪类');
//如:
var div = document.querySelector('.test');
var style = window.getComputedStyle(div, ":after");
  • 但是第二个参数伪元素兼容性不是很好,连jq封装都没用这个属性了。所以一般第二个参数就为 null
    getComputedStyle()方法如名字一样,它只能获取应用元素上的所有css属性,哪怕是写在另外的css文件里,也都能读到。 而普通的style属性,能读能写,不过只能是行内的style
  • getPropertyValue可以获取到相关的css属性。
    其实,直接 getComputedStyle(div, null).float 也是可以哒。不过呢,在某些时候就比较折腾了,因为不同的浏览器,这个属性值会有所变化。例如 float 在火狐上是 cssFloat 而在IE上是styleFloat。所以为了避免,就直接用 getPropertyValue就好啦。
var div = document.querySelector('.test');
var divComputedStyle = getComputedStyle(div, null);
// 打印一下它的 padding-left
console.log(divComputedStyle.getPropertyValue('padding-left'))
// 注意不需要转化为驼峰写法。
  1. 类似title的弹窗提示

如图片所示,这个上面的div黑色弹出块该很好的居中在对应的图标上方,下面是方法:
(这里的图标有一点的padding-rightpadding-top)

// 首先根据第一节的知识点getBoundingClientRect()来获取图标的left和top
var icon = document.querySelector('weibo');
var iconRect = icon.getBoundingClientRect();

// 根据第二节知识点 getComputedStyle() 获取 图标的padding-right 和 padding-top
var iconPright = getComputedStyle(icon, null).getPropertyValue('padding-right');
var iconPTop = getComputedStyle(icon, null).getPropertyValue('padding-top');

// 获取黑色的popover弹窗的 el,等下会用到 offsetWidth 和 offsetHeight
var popover = document.querySelector('popover');

// 最终需要计算出popover的 left 值和 top 值。
var left = iconRect.left + icon.offsetWidth / 2 - popover.offsetWidth / 2 - iconPright / 2 + 'px';
var top = iconRect.top - popover.offsetHeight + iconPtop + 'px';

这样就计算出来啦。其实还是要根据实际情况来的~ 不过大致的思路都是如此的。