【问题标题】:Is "seeked" event does not work in HTML audio element?“搜索”事件在 HTML 音频元素中不起作用吗?
【发布时间】:2017-08-08 17:03:17
【问题描述】:

我的情况:

我有一个音频元素,并通过 websocket 连接。当我暂停、播放等时,我房间里其他人的音频元素也会这样做。

问题是:

seeking 事件,如果有人玩搜索栏,我会发送数千个 websocket。所以seeked 事件是完美的,除了它与 seek 事件做同样的事情。

我的问题很简单。音频 html 元素上的 seeked 事件是否有效?

因为即使在 w3cSchool 上,该事件似乎也不起作用。 https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_av_event_seeked2

sharedAudio[0].onseeked = function() {
        session.signal({
            type: 'seeking',
            data: sharedAudio[0].currentTime
        }, function(error) {
            if (error) {
                console.log('Error sending signal:', error.name, error.message);
            }
        });
    };

我是不是做错了什么?

如果事件不能正常工作,有没有办法模拟同样的效果?

【问题讨论】:

  • onseeked 活动在 W3 Schools 网站上为我工作。为什么你说它对你不起作用?你用的是哪个浏览器?
  • 我使用的是 Chrome V59。对我来说,当我在搜索栏中移动时,警报框会立即弹出。对我来说,当我完成寻找视频示例中的“寻找”事件时触发事件:w3schools.com/tags/…。我误解了这个事件吗?
  • 您可以单击时间栏以移动到新位置。有些拖放不起作用。这就是你要提到的吗?
  • 尝试改变,在第一个例子中,'console.log' 的'alert',你就会明白我的问题。
  • 我将警报更改为alert("Seek operation completed!" + this.currentTime);,它非常适合消息中的时间偏移。

标签: javascript html dom-events html5-audio


【解决方案1】:

可以使用以下脚本忽略彼此非常接近的seeked 位置。

<script>
var previousseekpos = 0;
var vid = document.getElementById("myVideo");
vid.addEventListener("seeked", function() {
    var currentSeekPos = this.currentTime;
    if( (currentSeekPos - previousseekpos) > 2.0)
    {
       alert("Seek operation completed!");
       previousseekpos = currentSeekPos;
    }
});
</script> 

onseeked 事件不能优雅地处理滚动条中插入符号位置的拖放以进行音频控制。

【讨论】:

  • 谢谢,但这不是我需要的。这不是一个解决方案,因为如果我只移动 1 秒,事件将不会被触发并且会破坏我的应用程序。
  • 我知道这不是完美的解决方案。这就是为什么我添加了关于拖放行为的注释。您可以调整时间限制并使用较小的值,例如 0.5 秒。此外,您还必须考虑采用绝对值,因为可以向左/向右移动插入符号。我已经把这些留给你来实现。
  • 问题和beginnig一样,值更小。如果有人从 1:00 拖到 2:00,我的应用程序将发送 60/.05=120 个请求,我不希望这样。我只是想知道 video.seeked 事件是否与 audio.seeked 相同,但似乎不是。 audio.seeked 和 audio.seeking 事件做同样的事情。
猜你喜欢
  • 2018-07-02
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2012-10-31
  • 1970-01-01
相关资源
最近更新 更多