我有一个 div 作为抽屉,用户可以从窗口顶部拉下它,其中包含十几个带有一些样式的按钮。
在拉动它时展开/折叠该 div 的代码是:
drawer.style.height = `${Math.min(drawerParams.maxheight,drawerParams.startHeight + event.y - drawerParams.startY)}px`;
它在计算机上运行良好,但我在手机上严重滞后。这是用于移动设备的 chrome devtools 的图片:
这是该布局的结构和 CSS:
<style>
.main {
position: relative;
width: 100%;
height: 100%;
}
.drawer {
position: absolute;
top: 0;
width: 100vw;
background-color: lightgreen;
min-height: 7px;
z-index: 4;
}
.drawer-content {
position: absolute;
bottom: 7px;
display: flex;
flex-wrap: wrap-reverse;
justify-content: space-between;
}
.handle {
position: absolute;
width: 100%;
bottom: 0;
height: 7px;
}
</style>
<div class="main">
<div class="drawer">
<div class="drawer-content">
<div class="button">button1</div>
<div class="button">button2</div>
<div class="button">button3</div>
<div class="button">button...</div>
<div class="button">button10</div>
</div>
<div class="handle">
<!-- some svg -->
</div>
</div>
</div>
如果我将初始抽屉的位置设置为“top:200px”,我会看到内容已经存在,当从该位置拉出它时,我会遇到同样的性能问题。
我尝试在本文中使用 transform:translateY() :link,但没有效果。(我认为这是因为我没有从过渡开始到结束进行翻译,而是针对鼠标移动的每个像素都有一个翻译......?)
所以问题是(来自图片):
1:每次抽屉元素的高度发生变化时,浏览器是否会重新绘制 div?
2:为什么?
3:我可以改变什么来避免这种情况?