javascript - 在反应中滚动视频
问题描述
我正在用 ReactJS 建立一个网站。我正在尝试在可以通过滚动浏览的网页上合并视频。很像这里的这个例子:https ://codepen.io/anon/pen/pKwQop
我想知道如何将其合并到我的代码中。我第一次尝试这样做给我这个错误:https ://imgur.com/a/KfRgrmM
到目前为止,这是我的代码:
import React, { Component } from 'react';
import Navbar from '../components/GlobalNav';
import Footer from '../components/GlobalFooter';
import oculus from '../../public/static/video/oculus.mp4';
import './page2.css';
class Test extends Component {
componentDidMount() {
var vid = document.getElementById("Oculus");
var frameNumber = 0;
var playbackConstant = 500;
var setHeight = document.getElementById("Test");
vid.addEventListener('loadedmetadata', function() {
setHeight.style.height = Math.floor(vid.duration) * playbackConstant + "px";
});
function scrollPlay() {
var frameNumber = window.pageYOffset/playbackConstant;
vid.currentTime = frameNumber;
window.requestAnimationFrame(scrollPlay);
}
window.requestAnimationFrame(scrollPlay);
}
render() {
return (
<div className="Test">
<Navbar />
<div className="Site-content">
<video
tabIndex="0"
autobuffer="autobuffer"
preload="preload"
className="Oculus"
>
<source type="video/mp4" src={oculus} />
</video>
</div>
<Footer className="Footer" />
</div>
)
}
}
export default Test;
解决方案
看起来有两个问题。第一,您试图通过 ID 访问某些内容,但您似乎并没有宣布这个想法。但是,您也不应该这样做。相反,您应该指定一个ref并将其用于vid
.
(请注意,语法最近发生了变化。该文档显示了最新的语法。那里还有一个指向旧语法的链接。)
class Test extends Component {
constructor(props) {
super(props);
this.vid = React.createRef()
}
render() {
// blah
<video ref={this.vid}
/* blah */
/>
// blah
}
}
然后,不要使用vid
in componentDidMount
,而是使用this.vid.current
.
addEventListener
您可以更改的另一件事是直接将事件回调放在您<video>
的渲染中,而不是使用:
<video onLoadedMetaData={ this.metaDataCallback } />
进行这些更改应该或多或少让它以 React 友好的方式按预期工作。
推荐阅读
- python - 使用 django 自定义管理器方法作为 Q 对象链的一部分
- google-assistant-sdk - 我在哪里获得履行 URL?
- sql - 是否有任何 SQL 查询来识别身份和资源属性差异
- java - A类的多个main方法可以从另一个B类的main方法中调用吗
- tomcat - hybris mac hybris 启动错误突然来了
- docker - Docker:带有和不带有 tty 选项的错误重定向
- typescript - 意外的令牌,应为 ';' 在 React Native 构造函数中
- python - TensorFlow GPU 使用率始终低于 20%
- spring - 如何使用 TestContainers + Spring Boot + oracle-xe
- excel - 使用vb6在ole中显示缩放Excel