javascript - 为什么元素没有在 JavaScript 中获得过渡?
问题描述
我在这里有一个框,我希望它translateX(300px)
使用 2000ms获得transition
,这意味着它应该通过转换移动,但它不会随着转换移动,它只是transform
立即获得属性 no transition
,我不知道为什么,我怎样才能让它随着 JavaScript 中声明的转换移动?
document.getElementById('1box').style.transition = 'all 1000ms';
document.getElementById('1box').style.transform = 'translateX(300px)';
*{
padding: 0;
margin: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div{
width: 200px;
height: 200px;
background-color: yellow;
margin: auto;
transition: 1000ms;
}
<div id="1box"></div>
解决方案
尽管在 HTML 5 中允许以数字开头 id,但我建议不要这样做 (
<div id="1box"></div>
)。有时它在浏览器中可能会奇怪地失败(添加这个答案时,它在 CSS 和 JavaScript 中都失败了——在 Ubuntu 上使用 Chrome 90)。此外,正如@TechySharnav 回答的那样,将您的代码放入一个
window.onload
事件中。这将确保在加载文档后执行您的代码(您已经构建了 DOM)。一种更好的方法是使用类(这会从 JavaScript 代码中删除样式,并将所有内容都集中在一个位置,即您的 CSS 文件中)。此外,可以像添加类一样轻松删除类,还可以执行反向动画。
window.addEventListener('load', function() {
document.querySelector('#box1').classList.add('right-sidebar');
})
* {
padding: 0;
margin: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#box1 {
width: 200px;
height: 200px;
background-color: yellow;
margin: auto;
transition: all 2s;
}
.right-sidebar{
transform: translate(300px);
transition: all 2s;
}
<div id="box1"></div>
推荐阅读
- machine-learning - 高度不平衡数据集中使用的负样本数量的影响(XGBoost)
- c++ - boost::pool::ordered_free() 不能正常工作
- qt - QML 3D 基本示例
- amazon-ec2 - 用于 aws ec2 uri 的 Google API Web 客户端 Oauth 2 重定向 uri
- php - 如何获取动态键的值?
- sql - UNION ALL 不会在 Hive 中生成任何数据
- puppeteer - Puppeteer 不是有效的选择器
- azure - azure中是否有与aws eip等价的东西?除了负载均衡器
- sql - 两列显示一列的SQL百分比
- django - Angular http post请求意外附加括号