javascript - 如何在动态创建的对象上启用 CSS 过渡

标签 javascript css-transitions transition addeventlistener

我正在动态创建高度为 0% 的 div,该高度在 css 规则中指定。 然后我有一个选项/选择菜单,其中有一个事件监听器监听更改。当应用此更改时,我希望它应用 75% 的高度,效果很好。 不过我还希望它能在 2 秒的时间内过渡到这个新高度。此转换在元素的 css 规则中指定。 但是我无法完成这项工作,它会直接达到 75% 的高度,没有过渡。

我知道我需要使代码在 DOM 中“事件”,因此我尝试将高度样式的附加和应用分离到两个不同的函数中。

function makeBar() {
  container.innerHTML = '';
  let element = document.createElement('div');
  element.classList.add('bar');
  element.setAttribute('class', 'bar');
  element.style.backgroundColor = select.value; 
  container.appendChild(element);
}

select.addEventListener('change', function() {
  makeBar();
})  

select.addEventListener('change', function() {
  let bar = document.getElementsByClassName('bar')[0];
  bar.style.height = '75%';
})  

但是,如果我要替换第二个函数(该函数将高度应用为监听按钮单击的事件监听器),它就可以正常工作。请参阅https://jsfiddle.net/tdmitchell/3eu48zw7/30/看看我的意思。 虽然我真正想要发生的是当下拉菜单更改时,栏能够从 0% 平滑过渡到新的 75% 高度。

最佳答案

浏览器渲染过程的所有“结果”都是同时发生的 - 全部同时发生。您必须告诉浏览器等到下一个渲染周期后再“增长”元素。

  window.requestAnimationFrame(() => {
    bar.style.height = '75%';
  });

将实现这一目标。

关于javascript - 如何在动态创建的对象上启用 CSS 过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54427370/

相关文章:

javascript - 如何使变量的值根据其他变量而变化?

javascript - Laravel 中不返回表单值

html - -moz-transition 在我的 CSS 中不起作用

html - 为什么这个 css 过渡菜单在 Chrome 中不起作用 - 水平菜单?

javascript - 过渡组件 Vuejs - 不工作 - 内部和外部之间的差异

android - Activity 之间的过渡动​​画创建一个白尾神器

javascript - 使用 pg 管理从 nodejs 到 postgres 的许多连接

javascript - Android 网页 View : console is not defined

css - CSS 显示属性的过渡

transition - Vue.js 页面过渡淡入淡出效果与 vue-router