当前位置: 首页 > 面试题库 >

使用React在HTML5视频上更新源URL

吕高寒
2023-03-14
问题内容

我想更新HTML5视频元素中的source标签,以便单击按钮时,无论播放什么内容,都将切换到新视频。

我有一个Clip组件,它返回一个HTML5视频元素,其源URL通过props提供。

function Clip(props) {
  return (
    <video width="320" height="240" controls autoPlay>
      <source src={props.url} />
    </video>
  )
}

我还有一个Movie组件,其中包含多个URL,每个URL对应于电影的一部分。它还包含一个position属性,它通过记住当前正在播放的部分来充当迭代器。

class Movie extends Component {
  constructor() {
    super();
    this.state = {
      sections: [
        'https://my-bucket.s3.amazonaws.com/vid1.mp4',
        'https://my-bucket.s3.amazonaws.com/vid2.mp4'
      ],
      position: 0
    };
  }
  render() {
    const sections = this.state.sections
    const position = this.state.position

    return (
      <div>
        {position}
        <Clip url={sections[position]} />
        <button onClick={() => this.updatePosition()}>Next</button>
      </div>
    )
  }
  updatePosition() {
    const position = this.state.position + 1;
    this.html" target="_blank">setState({ position: position });
  }
}

电影组件呈现一个Clip组件和一个“ Next”按钮。单击“下一步”按钮后,我想更新位置属性,并使用部分中的下一个URL重新呈现HTML5视频元素。

到目前为止,当我单击“下一步”时,HTML5视频源标记将更新,但是该元素将继续播放前一个URL中的视频。谁能帮我弄清楚如何重置视频元素?

更新: 我创建了一个JSFiddle,您可以在这里看到。

更新2: 更新video元素上的src属性是可行的!


问题答案:

短篷:key<Clip>或上添加道具<video>,例如:

function Clip({ url }) {
  return (
    <video key={url}>
      <source src={url} />
    </video>
  );
}

长遮篷:
视频不会改变,因为从本质上讲,您只是在修改<source>元素,而React知道<video>应该保持不变,因此不会在DOM上对其进行更新,也不会触发load该源的新事件。

为了确保不仅<source>得到更新,还要确保对其进行更新<video>key以便React理解这是一个全新的元素。

有关更完整的说明,请查看有关React docs上的键的本文:)



 类似资料:
  • 我要做的是创建一种播放列表,只使用html5和vanilla javascript(不使用jquery)。相同的短视频一直循环直到你点击其中一个箭头,然后一行中的下一个(或上一个)视频被加载到相同的视频元素中。 以下是我的资料: HTML JavaScript 但是,使用这段代码,单击任何一个箭头似乎都没有任何作用。但我不确定我做错了什么。我首先想到的是if测试失败了,所以它只是重新加载了相同的视

  • 我想在画布上画一段视频。为了实现这一点,我在Javascript中捕获onMouseDown和onMouseUp事件,以获得每个事件的x和y坐标(我需要在画布中设置视频的位置、宽度和高度)。 因此,每次我在画布上绘制视频时,我创建的上一个视频都应该停止,并且必须播放新的视频。两个问题: 1)视频不播放(功能只画第一帧),但他的音频可以 2) 如何停止以前绘制的视频? 演示:http://jsfid

  • 问题内容: 我正在尝试将YouTube视频源放入HTML5标签,但似乎不起作用。经过一番谷歌搜索,我发现HTML5不支持YouTube视频URL作为来源。 您可以使用HTML5嵌入YouTube视频吗?如果没有,是否有任何解决方法? 问题答案: 第1步:添加到您喜欢的YouTube网址 步骤2:在来源中寻找标签 第3步:添加到视频标签: 例: 注意那里似乎有些东西。我不知道该字符串可以工作多长时间

  • 我正在制作一种带有全屏视频背景的个人网站。我需要为不同的屏幕大小加载不同的视频。我正在使用React,并基于React Hooks制作组件。 这些是我的依赖版本: 在我的组件“VideoBackground”中,我使用useState创建了一个状态,我将在其中存储视频源和海报图像源,如下所示: 我使用useEffect钩子作为componentDidMount函数,根据窗口宽度动态加载视频,并向浏

  • 本文向大家介绍HTML5视频无法在iPad上使用jquery bxSlider插件,包括了HTML5视频无法在iPad上使用jquery bxSlider插件的使用技巧和注意事项,需要的朋友参考一下 要使其工作,请从官方网站下载bxslider插件。从下载的bxslider zip中获取图像文件夹,然后将其粘贴到项目的js文件夹中。 所有文件夹现在看起来像- 以上应该可以解决您的问题。

  • function checkVideo() { if(!!document.createElement('video').canPlayType) { var vidTest=document.createElement("video"); oggTest=vidTest.canPlayType('video/ogg; codecs="theora, vorbis"'); if (!oggTest