为什么元素没有在 JavaScript 中进行转换?

Why isn't the element getting the transition in JavaScript?

我这里有一个框,我希望它在 2000 毫秒 transition 时获得 translateX(300px),这意味着它应该随着过渡移动,但它不会移动 使用 转换,它立即得到 transform 属性 而没有 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>

通过 css 在元素上添加过渡 属性。

#lbox {
    transition: transform 2s;
}

或反转您的 js 声明的顺序:

document.getElementById('1box').style.transition = 'transform 2s';
document.getElementById('1box').style.transform = 'translateX(300px)';

您需要使用 windowonload 函数,并将所有样式放在函数中。

window.onload = function() {
  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;
}
<div id="1box"></div>

  1. 虽然在 HTML 5 中允许 id 以数字开头,但我建议不要这样做 (<div id="1box"></div>)。有时它可能会在浏览器中奇怪地失败(添加此答案时,它在 CSS 和 JavaScript 中都失败了 - 在 Ubuntu 上使用 Chrome 90)。

  2. 此外,正如@TechyShaarnav 回答的那样,将您的代码放入 window.onload 事件中。这将确保您的代码在文档加载后执行(您已经构建了 DOM)。

  3. 更好的方法是使用 类(这会从您的 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>