以编程方式在音频元素上设置当前时间属性会导致事件侦听器无限期地触发

2024-02-22

正如标题所述,当设置currentTime以编程方式指定音频元素的属性。设置该值后,事件侦听器将无限期地反复触发。

音频将尝试播放,但由于正在进行太多处理,音频将跳过,我的浏览器将开始变得无响应。

我通过删除对的绑定解决了这个问题currentTime变量,但我只是想问是否有人对为什么会发生这种情况有所了解?最初,这种情况只发生在 Firefox 上,但今天也开始发生在 Chrome 上。在 Safari 或 IE 11 中不会发生。

这是一个例子:https://jsbin.com/yorawo/edit?html,控制台,输出 https://jsbin.com/yorawo/edit?html,console,output

想法?

<body>
  <button onclick="play()">Play</button>
  <button onclick="pause()">Pause</button>
  <audio id="audio" src="https://api.soundcloud.com/tracks/172463126/download?client_id=02gUJC0hH2ct1EGOcYXQIzRFU91c72Ea&oauth_token=1-138878-53859839-4dcd0ce624b390"></audio>

  <script>
    var audio = document.getElementById('audio');

    // remove the line below (audio.currentTime = 0) and then try to play the audio. notice the audio plays just fine.
    // then add the line back in and notice how the console will fill up
    audio.oncanplay = function () {
      audio.currentTime = 0;
    }

    audio.ontimeupdate = function () {
      console.log('why');
    }

    function play() {
      audio.play();
    }

    function pause() {
      audio.pause();
    }    
  </script>
</body>

我将复制@dandavis 提到的内容:

当你跳到时间上时,在你可以玩之前有一段时间,所以 canplay() 在你可以再次玩后触发

在上面的代码块中,我将 currentTime 设置为某个值,并且我已设置oncanplay事件处理程序重置该值。每当currentTime被设置为一个值,oncanplay被解雇了。由于我正在重置currentTime in the oncanplay处理程序,此事件会无休止地发出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式在音频元素上设置当前时间属性会导致事件侦听器无限期地触发 的相关文章

  • 生产中的 Webpack:为什么 React Native 会出现错误?

    我有一个测试应用程序 安装了以下内容 dependencies express 4 14 0 react 15 3 2 react dom 15 3 2 devDependencies babel 6 5 2 babel core 6 18
  • React Native 将样式设置为 State

    我想用backgroundColor of style1作为一种状态 并在函数中改变它change 我怎样才能访问style1 我的观点是调用该函数change从另一个函数 使按钮将其颜色更改为黄色 然后在一段时间后再次将其颜色更改为蓝色
  • 如何检索 jquery $.ajax 对象的responseJSON属性[重复]

    这个问题在这里已经有答案了 我有这个 JavaScript ajax ajax type GET url DBConnect php data dataType json success function data error functi
  • npm 脚本:node-sass 不监视部分 sass 文件

    我有这个项目结构 src assets css sass main scss variables scss 我正在尝试编写一个 npm 脚本 该脚本将监视我的所有 scss 文件 包括部分文件 中的更改 然后仅编译我的 main scss
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • 对 JavaScript 中的 while 循环感到困惑

    我可能在这里有点厚重 但请回答我这个问题 考虑以下代码 a 1 while a lt 6 console log a a 如果我运行这个 我会在控制台中得到从 1 到 6 的值 然后是另一个 6 现在看看这个 a 1 while a lt
  • jquery/javascript 处理后移至命名锚点

    在进行一些 jquery 处理后 如何将焦点移动到同一页面上的不同部分 名为锚点 函数 ABC 进行一些处理 然后 我需要将用户移动到同一页面上的某个部分 页面下方 您可以使用下面的代码将屏幕滚动到 div 只需更改选择器以匹配您要滚动到的
  • Chart.js 没有显示在我的视图中

    我有一个使用 angular js 运行的应用程序 我的视图之一应该加载图表 我正在使用 Chart js 但由于某种原因它不起作用 并且我的控制台上没有显示错误 这是我创建图表的函数 scope writeBatteryChart fun
  • GeoJSON 要素坐标未显示在 OpenLayers 地图上

    我正在尝试显示一个GeoJSON地图上的多边形 我使用了 OpenLayers 提供的示例以及以下数据 但仅显示第二个多边形 var geojsonObject type FeatureCollection crs type name fe
  • 按自定义字母顺序对数组进行排序

    如何对这样的数组进行排序 apple very auto tom tim violet 要按 v a t x b 等排序 不按字母顺序 violet very auto tom tim 在脚本中 我会做这样的事情 myArray sort
  • 如何获取调用函数的“this”值?

    如果我有一个这样的函数 function foo this console log this function bar bar prototype func function foo this var test new bar test f
  • 在 Chrome 中检索浏览器语言

    我一直在尝试让 momentjs 正确检测浏览器语言并本地化时间显示 按照使用 Moment js 进行区域设置检测 https stackoverflow com questions 25725882 locale detection w
  • 获取键盘事件中的鼠标位置

    我试图在用户按住 Shift 键时出现选择轮 滚轮应以鼠标位置为中心 然而当我测试这个时 pageX and clientX两者在事件对象上都未定义 是否可以通过键盘事件获取鼠标坐标 不 只需跟踪mousemove事件并持续保存当前位置 以
  • 如何在流程图中间隔刻度线?

    我下面有一个流程图 您将看到标签被压缩 我想使刻度之间的宽度确保显示所有标签 标记如下 div div class graph info a href span span a a href class active span span a
  • 用于客户端存储和服务器端同步的javascript库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 javascript 库 它可以让我将数据存储在客户端数据库中 并在后台自动将数据库同
  • ERR_IMPORT_ASSERTION_TYPE_MISSING 用于导入 json 文件

    这段代码运行良好 我不知道是因为我升级到 Node 17 还是什么原因 但现在我明白了 TypeError ERR IMPORT ASSERTION TYPE MISSING Module file Users xxxxx code pro
  • 如何在变量名中使用变量

    所以我正在使用这样的 json 变量 opponentInvData item1 它包含项目 1 到 6 我需要动态访问不同的项目并将它们设置为空 itemNum 是我需要访问的特定项目 我正在尝试使用 eval 函数 var itemNu
  • 在javascript中定义Date.parse的格式[重复]

    这个问题在这里已经有答案了 我正在使用 Date parse 将字符串转换为 JavaScript 中的日期 但是 如果字符串看起来像 10 11 2016 它会被解释为 2016 年 10 月 11 日 我需要将其解释为 2016 年 1
  • 如何在 Javascript 中将字符串数组转换为特定的树结构

    我从后端获取文件路径列表 它代表文件夹结构 如下所示 paths path to file1 doc path to file2 doc foo bar doc 路径的长度是任意的 为了使用文件树组件 角度2树组件 https github
  • JavaScript 右移负数

    这是片段 var i 101 console log 101 i toString 2 console log 101 gt gt 1 i gt gt 1 toString 2 var l 101 console log 101 l toS

随机推荐

  • Chai 无法识别内容类型“application/javascript”

    无论我的服务器实际返回什么 Chai 总是给我res body 如果内容类型是 application javascript 这是我的服务器 const http require http const server http createS
  • 在 Go 中将 unicode 代码点转换为文字字符

    假设我有一个这样的文本文件 u0053 u0075 u006E 有什么方法可以将其转换为这个吗 S u n 目前 我正在使用ioutil ReadFile data txt 但是当我打印数据时 我得到的是 unicode 代码点而不是字符串
  • WSO2 身份服务器外部 LDAP 因 OID 身份人员不存在而抛出 OBJECT_CLASS

    我正在使用 Identity Server 4 1 0 并且还在 Apache Directory Studio 中运行 ApacheDS 所以我现在想要的是将我的 IS 连接到外部 LDAP IS 与 ldap 的连接良好 只是由于缺少属
  • 多个事件的 Gmail 标记

    我正在使用 json ld 开发事件标记 以包含在确认电子邮件中 我的一些事件会定期重复发生 但是 最新的 Schema org 规范不支持重复事件 因此我遵循了此处提供的建议 http lists w3 org Archives Publ
  • ORACLE/ASP.NET:ORA-2020 - 数据库链接太多......是什么原因造成的?

    这是场景 我们有一个运行最新版本 ODAC Oracle 客户端 的内部网站 它打开数据库连接 运行存储过程或打包方法 然后断开连接 连接池已打开 目前我们的开发和测试环境均处于 11g 版本 但生产环境处于 10gR2 版本 这种情况发生
  • 从 IE 中 HtmlElement 的 Dom 获取 IHTMLStyle3

    我在窗体上有一个 System Windows Form WebBrowser 控件 我将该浏览器对象导航到一个网址 页面加载完成后 我想分析加载的页面的各个方面 我特别感兴趣的是在 IHTMLStyle3 接口上找到的属性 writing
  • Selenium WebDriver C# 使用 ChromeDriver 和 FirefoxDriver 的完整网站屏幕截图

    当我使用 ChromeDriver 截取屏幕截图时 我会得到与我的视口大小相同的屏幕 当我使用 FirefoxDriver 截取屏幕截图时 我得到了我想要的 即网站的全屏打印 ChromeDriver 声明如下 IWebDriver dri
  • 如何将 .NET Compact Framework 添加到智能设备 CAB 项目中?

    我正在开发一个 VS2008 智能设备应用程序 其中包含用于部署的智能设备 CAB 项目 我惊讶地发现此安装程序项目在必要时不会安装 NET Compact Framework 可以这样做吗 这可以通过一些工作来完成 看自动将多个 CAB
  • 如何使用 jquery 清除文本区域

    这个问题已经得到解答 但为了将来的参考 这里有一个完整的例子 您可以根据需要多次单击 添加 按钮和 清除 按钮 它就会起作用 但是 一旦您在文本框中输入内容 清除和添加按钮就不起作用
  • 正确使用电子

    我想进入 Electron 并且我已经开始学习它 但是我认为我不太明白应该如何使用它 根据我收集的信息 使用 Electron 我能够创建跨桌面应用程序 铬 with HTML CSS 和 JavaScript并在后台执行任务 NodeJS
  • 返回 void* 的 C++/C 函数指针

    我正在尝试调用一个带有参数的函数 void void int const char 但我不知道如何将这些参数传递给函数 Example void ptr int int function int int void int 我试图像这样调用该
  • 如何在 CodeIgniter 中检查请求是否是通过 AJAX 发出的?

    如何检查请求是否是 AJAX 我正在使用 CodeIgniter 我有一个链接 当它单击时 它将打开弹出对话框窗口 这是通过 ajax 请求控制器名称来完成的login window 代码点火器 Here is the controller
  • pip 未能为 scipy 构建轮子

    我刚刚下载了新的python 3 8我正在尝试安装scipy使用以下内容进行封装 pip3 8 install scipy 但是构建失败并出现以下错误 Failed to build scipy ERROR Could not build
  • 如何重构这个?

    我试图重构这个 class AClass string Property1 get set string Property2 get set string Property3 get set void AMethod AClass othe
  • symfony2主义选择IFNULL

    好的 我有这个代码 SELECT IFNULL s2 id s1 id AS effectiveID IFNULL s2 status s1 status AS effectiveStatus IFNULL s2 user id s1 us
  • dplyr: case_when 涉及很多情况

    我有两个数据框 set seed 002 data1 lt data frame cbind a1 sample letters 8 replace TRUE a2 rpois 8 10 stringsAsFactors FALSE dat
  • 复选框已全部单击

    我想在单击任何子项时选择父项 这段代码正在检查和检查 function child on click function parent this prevAll parent if this is checked parent prop ch
  • 如何避免 Java 中的 switch-case 语句[重复]

    这个问题在这里已经有答案了 我有一个 TriggerType 枚举 可以在其中添加不同的触发器 public enum TriggerType meta data list toggle 这些触发器类型在不同的处理程序 例如组件 仪表板等
  • 如何为 Facebook 应用程序设置画布 url?

    这个问题之前已经被问过很多次了 但是最近 Facebook 开发者网站显然发生了变化 因此该解决方案在任何地方都找不到 Here s what the problem looks like 抱歉 您使用的应用程序配置错误 请稍后重试 Now
  • 以编程方式在音频元素上设置当前时间属性会导致事件侦听器无限期地触发

    正如标题所述 当设置currentTime以编程方式指定音频元素的属性 设置该值后 事件侦听器将无限期地反复触发 音频将尝试播放 但由于正在进行太多处理 音频将跳过 我的浏览器将开始变得无响应 我通过删除对的绑定解决了这个问题current