css - CSS 恒定转换速度
问题描述
我正在努力实现恒定的过渡速度。
请注意,我并不是指“轻松”和“线性”之间的区别。我的意思是如果我们从 0px 到 20px 需要 1 秒,但从 0 到 100px 应该需要 10 秒。
.box {
width: 0px;
height: 20px;
transition: width 1s linear;
}
似乎无法找到一种方法来做到这一点。而我所有的搜索都只是出现了轻松/线性差异。
.
解决方案
我发现最好的方法是使用自定义属性。在下面的示例中,我使用20
来表示一个宽度单位。当乘以.05
我们得到1
, 或一秒。使用自定义属性,我们可以将transition-width
变量覆盖为所需的像素长度。计算将动态更新并transition-duration
相应调整。
setTimeout(() => {
document.querySelector('.box.one').classList.add('start');
document.querySelector('.box.two').classList.add('start');
}, 0);
.box {
--transition-width: 20;
--transition-speed: .05;
width: 0px;
overflow: hidden;
height: 20px;
transition-property: width;
transition-timing-function: linear;
transition-duration: calc(var(--transition-width) * var(--transition-speed) * 1s);
background: black;
}
.box.one.start {
width: 20px;
}
.box.two.start {
--transition-width: 100;
width: 100px;
}
<div class="box one"></div>
<div class="box two"></div>
推荐阅读
- python - 如何修复错误异常以使脚本重新启动
- python - 如何在创建 python api 时安装 sql server 驱动程序
- python - 无法使用 openpyxl Workbook 将数据写入 Excel-Sheet
- font-awesome - 如何在 Vuetify 和 Nuxt.js 中使用 Font-Awesome SVG
- python - 如何使用多行和多列作为输入在 DataFrame Column 上应用函数?
- alexa - 如何询问 Alexa 技能的语音评级?
- c# - 在 DataTable Delete 操作中多次发送 Ajax 请求 - ASP.NET、JQuery、Ajax
- powershell - 将查询对象格式化为数组
- javascript - 为什么严格模式不会在重复的属性名称上引发语法错误?
- python - 如果在“-”和“-”之间,则打印字符串