Q: 移动端禁止弹出层背景滚动
方案一: document.body.style.overflow = 'hidden';
PC上有效果,在移动端背景依然可以滚动
方案二:
document.getElementsByTagName('html')[0].style.overflow = 'hidden';
方案三:
document.getElementsByTagName('html')[0].style.overflow = 'hidden';
document.body.style.overflow = 'hidden';
image.png
PC和移动端都可以禁止背景滚动,但是每次背景都会弹回到最顶部
方案四:
document.body.addEventListener('touchmove',this.stopScroll)
document.body.style.overflow = 'hidden';
移动端阻止touchmove事件即可。参考
Q:picker组件Top的高度值应该重新计算
场景:
-
获取li高度来动态的设置滚动距离
获取高度
实际结果
// 获取li高度并存入缓存
let liNode = childs[1].getElementsByTagName('li')[0];
self.cacheMsg.distance = liNode.getBoundingClientRect().height;
console.log(window.getComputedStyle(liNode).height); // 43.9375px
console.log(self.cacheMsg.distance); // 43.9375
console.log(liNode.offsetHeight); // 44
<div id = 'main' style="height: 300px;">Height</div>
#main{
width: 100px;
height: 100px;
background: red;
padding: 10px;
margin: 5px;
border: 1px solid red;
}
- 通过
height
获取高度document.getElementById("id").style.height
(需要这样设置才能获取到高度,<div id="idName" style="height:300px;">
),这时获取到的高度是300px;
,注意element.style
获取到的高度是未经过计算的。 - 通过
window.getComputedStyle(document.getElementById("main")).height;
获取元素高度。行内样式优先,获取到的是300px
如果没有行内样式获取到是100px
。getComputedStyle
是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。
语法:var style = window.getComputedStyle("元素", "伪类");
getComputedStyle()
与element.style
的区别:getComputedStyle()
是只读的,方法获取的是最终应用在元素上的所有CSS属性对象(即使没有CSS代码,也会把默认的祖宗八代都显示出来);而element.style
可读可写,但是只能获取到style
属性中的样式。
- 通过
offsetHeight
获取高度不受行内样式的影响,获取到是122px
会加入元素的height+padding+border
。表示是自身的高度,如果有设置boder的话还应该加上boder的值。 - 通过
clientHeight
获取高度是120px
是计算height+padding
。可见区域的宽度,不包括boder的宽度,如果区域内带有滚动条,还应该减去横向滚动条不可用的高度,正常的是17px。 - 通过
dom.getBoundingClientRect().height
获取到的高度和offsetHeight
一样是122px
,不同的是通过offsetHeight
等获取到的高度是经过四舍五入的,但是通过getBoundingClientRect()
可以获得精确值,且兼容IE8.
了解更多:
1. 获取元素CSS值之getComputedStyle方法熟悉
2. height、clientHeight、scrollHeight、offsetHeight区别
Q:背景透明度的坑
设置背景透明度不要直接用opcity
尽量使用background: rgba(0, 0, 0, 0.6);
因为opcity
有继承性。
找到页面“点透”问题产生的原因,是因为设置了li
元素的:active
属性时候改变透明度。
Q:如何设置蒙版导致背景字体也变暗。
目标效果如下:
先后渲染的效果
放在上面
由于
markTop
和markBottom
两个浮层都是有absolate
布局,如果二者放在pickerWheel
之上会导致mark
两个浮层先渲染浮动到上面和下面,然后pickerWheel
再渲染定位会覆盖在两个浮层的上面,效果如下mark先渲染 放在下面
image.png
使用
background: linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,.4));
http://www.css88.com/book/css/values/image/linear-gradient().htm
Q: 块级元素实际是有高度的,但是通过offsetHeight
或者clientHeight
设置的时候显示都为0.
- 原因是因为设置了
display:none;
不占位置空间导致的。 - 获取元素高度还可以通过
getBoundingClientRect()
,可以获取到元素的各个方向上的高度。
网友评论