javascript - 向 DOM 添加元素然后在 n 秒后删除它们?

标签 javascript html ecmascript-6 reactjs

我想在点击时创建动画效果。我需要添加元素并在每次点击后 3 秒内将其删除。不是一个元素,如果用户在 3 秒内点击 100 次,我应该附加 100 个元素并删除它。

click() {
  // create element
  // append element to div
  // remove in 3 sec
}
render() {
   return (
     <div className="main" onClick={this.click}>Click it</div>
   )
}

使用 vanila JS/JQuery 很容易做到

click() {
  let elm = $('</div>');
  elm.addClass('animation');
  $('.main').append(elm);
  setTimeout(() => {
     elm.remove();
  }, 3000);
}

我应该使用 React 来渲染这些元素(.map, setState,...)还是我可以使用 vanilla JS(appendChild, removeChild)?

JQuery 中的简单示例 - https://jsfiddle.net/W4Km8/10107/

谢谢。

最佳答案

你可以这样做:

this.state = { items: [] }

addItem() {
  const newItem = (<span>hello</span>)

  this.setState({ items: this.state.items.concat(newItem) }, () => {
    setTimeout(() => {
      this.setState({ items: this.state.items.filter(i => i !== newItem) })
    }, 3000)
  })
}

render() {
  return (
    <div>
      <div className="main" onClick={this.addItem}>Click it</div>
      {this.state.items.map((item, i) =>
        <div key={i}>{item}</div>
      )}
    </div>
  )
}

关于javascript - 向 DOM 添加元素然后在 n 秒后删除它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253116/

相关文章:

javascript - 在可点击表格行中添加可点击元素

html - 为什么我的 &lt;input&gt; 元素的内容区域超出其父 <span> 元素?

javascript - 三.js HTML菜单交互

javascript - Jquery 脚本可以在 JSfiddle 中运行,但不能在 html 页面上运行

javascript - ES5 和 ES6 的导入区别

javascript - JavaScript 中是否有一些语音或语音就绪事件?

javascript - Indexeddb 中止错误

javascript - 我正在尝试将 Mongoose 中的 $set 更改为字段,但只有一个字段发生变化?

javascript - 使用 [...new Set()] 仅获取基于内部 Array<object.id> 的唯一值?

javascript - 使用 jQuery 的动画径向渐变