当通过innerHTML 添加元素时,为什么我的动画会“重播”?

2023-12-19

我有一个小脚本,使用以下命令添加一个名为“doge”的 divinnerHTML当单击我的页面上的按钮时,此页面上有一个带有 CSS 关键帧动画的 div。

但是,当我单击按钮在页面上添加名为“doge”的 div 时,CSS 动画会“重播”。为什么?我该如何解决这个问题?

function addHtml() {
    document.getElementById("wow").innerHTML += '<div class="doge">such wow</div>';
}
@keyframes color {
    10% {
        background: #4CAF50;
    }
    50% {
        background: #3F51B5;
    }
    100% {
        background: #009688;
    }
}

.myDiv {
    background: #000;
    color: #fff;
    animation: color 1s;
}

.doge {
    background: #F57F17;
}
<div id="wow">
    <div class="myDiv">Hi!</div>
    <br>
    <button onclick="addHtml()">Add HTML!</button>
</div>

JSFiddle https://jsfiddle.net/mvu8g8tn/


这是因为当您修改元素时,您正在修改该元素的所有 HTML.innerHTML财产。

根据MDN https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML:

.innerHTML- 删除所有元素的子元素,解析内容字符串并将结果节点指定为元素的子元素。

在此过程中,DOM 假设.myDiv元素刚刚被添加,这意味着动画将被重播。要解决这个问题,请使用.appendChild() method https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild反而:

更新的示例 https://jsfiddle.net/32kjxkfp/

var div = document.createElement('div');
div.textContent = 'such wow';
div.className += 'doge';
document.getElementById("wow").appendChild(div);

或者,作为提姆指出 https://stackoverflow.com/questions/34401219/why-does-css-keyframe-animation-is-replayed-when-an-element-is-added-with-ja/34401259?noredirect=1#comment56545547_34401259,您还可以使用.insertAdjacentHTML() method https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML:

更新的示例 https://jsfiddle.net/dfc6xtgj/

document.getElementById("wow").insertAdjacentHTML('afterend', '<div class="doge">such wow</div>');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当通过innerHTML 添加元素时,为什么我的动画会“重播”? 的相关文章

  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • Iframe 相对路径挑战

    我有一个页面 在页面内有一个 Iframe 目录如下 Folder1 Folder2 IframeCSS IframeCSS Css iframePage1 html stuff css parentPage1 html 在 iframeP
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 避免响应式页面的重复内容

    我目前正在做一个涉及响应式设计的项目 整个布局应该使用HTML和CSS来实现 我知道可以使用 java 脚本将内容从一个列布局移动到另一列布局 而无需复制内容 但是使用 HTML 和 CSS 是否可以实现相同的效果 以下面的例子为例 它会在
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 指针事件:无,过滤,适用于 ie8 和任何地方,不适用于 ie9

    正如我在这里看到的 https stackoverflow com questions 3680429 click through a div to underlying elements 4839672 4839672 过滤器可用于模拟跨
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成

随机推荐

  • Nextjs 在生产服务器上部署后不使用图像 url 获取图像

    对于生产部署 我们有一个由 3 台 Linux 机器组成的网络 其中两个用于部署 一个是 nginx 代理 对于开发部署 我们有一台单独的 Linux 机器 在前端 这是一个 nextjs 框架 内部 设置了一个 http proxy mi
  • VB中可以继承带参数的sub new(构造函数)吗?

    在下面的代码中我收到编译错误 Error Too many arguments to Public Sub New on the Dim TestChild As ChildClass New ChildClass c 我没有收到它Test
  • ASP.NET MVC3:您可以发布并绑定对象数组吗?

    我的任务是创建一个表单 允许用户向其中添加一组或多组答案 例如 他们将从下拉列表中进行选择 然后将另一组输入添加到表单中 他们可以重复此过程 X 次 就服务器上的处理而言 处理此问题的最佳方法是什么 我知道我可以将每个元素绑定到一个列表 然
  • Cucumber 2.0.0 与 RubyMine 6.x 和 TeamCity 格式化程序不兼容

    我正在尝试在我的自动化测试套件中设置 Cucumber 我目前正在使用 Ruby 2 0 但在使用 Ruby 2 2 时也遇到了同样的问题 我尝试过 Cucumber 2 0 0 以及 2 0 0 beta 3 它们似乎都不与 Ruby 2
  • 在 Restlet 中上传带有描述的文件

    我需要上传一个文件使用一些附加数据restlet 所以我创建了一个示例 html 页面 如下所示 h1 Upload File with RESTFul WebService h1
  • Github企业API合并后删除分支

    我目前正在使用 Github API 企业版 经过一番尝试和错误后 我能够使用curl X POST 更改拉取请求的状态 curl u
  • 如何向 XML (XSD) 架构中的复杂类型添加限制?

    谁能帮我添加一个限制到这个模式文件 OwnerEnglishName 我知道如何使用简单类型来做到这一点 而在复杂类型中我不知道如何做到这一点 有人可以帮忙吗 多谢 原始 XML
  • kotlin android 片段返回后空回收器视图

    我有这个 android 片段 class MainFragment BaseFragment private val recyclerView by lazy find
  • 运行中的配置变量!框架

    我是 Play 的新手 编写了我的第一个应用程序 该应用程序有一组它所依赖的 URL 用于从中提取数据并在 XML 响应上返回有效的 URL 该应用程序需要在不同的环境 Dev Staging 和 Prod 中运行 并且每个环境都需要自己的
  • Google 语音识别 API:每个单词的时间戳?

    可以使用 Google 的语音识别 API 通过发出请求来获取音频文件 WAV MP3 等 的转录http www google com speech api v2 recognize 示例 我说过 一二三五 在 WAV 文件中 Googl
  • Mach-O 符号存根 (IOS)

    我正在尝试了解 Mach o 文件的工作原理 并且利用可用的在线资源 特别是这里的 Apple 页面 http developer apple com library mac documentation developertools con
  • 如何通过类名获取同级元素,然后仅使用 Javascript 隐藏它?

    我有这个 html 结构 div div div class content div 我想隐藏名为的类的元素content给定同级元素 id 为xyz 在 jQuery 中我可以轻松地这样做 xyz siblings content css
  • Google Analytics iOS 活动跟踪开发测试

    我正在尝试对我的 iOS 应用程序使用 Google Analytics iOS 活动跟踪 但在将我的应用程序上传到 Appstore 之前 我想知道一切是否正常工作 我想在以下函数处放置一个断点 application UIApplica
  • XSLT 获取特定标记的第一次出现

    假设我有一个完整的 html 文档作为 XML 输入 如果我只想输出 html 中的第一个 或任何 图像 XSLT 文件会是什么样子 选择第一个的一个 XPath 表达式 img 文档中的元素是 img 1 Do note that 一个经
  • 如何规避 Perl 的字符串转义 s/// 中的替换字符串?

    我不知道到底该怎么称呼它 但我已经能够用两条单行语句重现我的问题 从包含以下内容的文件 test txt 开始 foo 运行以下命令后 在 bash 中 perl n e s w oo 1ar print test txt 输出是 far
  • 使用 pyparsing 进行部分评估

    我需要能够采用使用 OpenDocument 公式语法的公式 将其解析为 Python 可以理解的语法 但无需评估变量 然后能够通过更改变量的值来多次评估该公式 公式可以是用户输入 因此 pyparsing 使我能够有效处理公式语法并清理用
  • 我的调用 async/await 在我的操作中返回 Promise {}

    您好 我对 api 调用非常陌生 我开始使用 axios 来获取一副简单的纸牌 我正在尝试执行一个简单的 axios 调用 当我通过控制台记录我的资源时 它会为我提供所需的内容 但是当我返回它时 它给了我 Promise 据我所知 这是因为
  • 如何为通用 lambda 参数定义模板参数? [复制]

    这个问题在这里已经有答案了 解释 当我编写 lambda 作为以 lambda 作为参数的泛型函数的参数时 CLion 及其标准编译器给我一个错误 即 候选模板被忽略 该 lambda 采用泛型类型T并返回另一个未知类型A 我正在编写的容器
  • 为什么fragment中的getContext()有时会返回null?

    Why getContext 有时返回null 我将上下文传递给LastNewsRVAdapter java作为一个论点 但LayoutInflater from context 有时会崩溃 我在 Play 控制台上收到一些崩溃报告 以下是
  • 当通过innerHTML 添加元素时,为什么我的动画会“重播”?

    我有一个小脚本 使用以下命令添加一个名为 doge 的 divinnerHTML当单击我的页面上的按钮时 此页面上有一个带有 CSS 关键帧动画的 div 但是 当我单击按钮在页面上添加名为 doge 的 div 时 CSS 动画会 重播