Я создаю сайт на 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;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, есть две проблемы. Во-первых, вы пытаетесь получить доступ к чему-либо по идентификатору, но, похоже, не заявляете об этой идее. Однако и этого делать не стоит. Вместо этого вы должны указать ссылка и использовать его для vid.
(Обратите внимание, что синтаксис был недавно изменен. В этом документе показан последний синтаксис. Там же есть ссылка на старый синтаксис.)
class Test extends Component {
constructor(props) {
super(props);
this.vid = React.createRef()
}
render() {
// blah
<video ref = {this.vid}
/* blah */
/>
// blah
}
}
Затем вместо использования vid в componentDidMount используйте this.vid.current.
Еще одна вещь, которую вы можете изменить, - вместо использования addEventListener поместите обратный вызов события прямо на ваш <video> в рендере:
<video onLoadedMetaData = { this.metaDataCallback } />
Внесение этих изменений должно более или менее позволить ему работать так, как задумано, и дружественным к React способом.
Ваш код присваивает переменную
vidэлементу с Я БЫ изOculus, но похоже, что у него есть класс изOculus, а не ID. Та же проблема с вашим контейнером.