WedX - журнал о программировании и компьютерных науках

Моя пользовательская панель поиска не работает должным образом HTML5?

Я делаю видеоплеер в React.js. Я пытаюсь создать пользовательскую панель поиска с синхронизацией с видео, но мой поиск не работает должным образом, как ожидалось, пока пользователь перетаскивает этот GIF. Панель поиска не реагирует на движение пользователя, она возвращается в исходное положение. Надеюсь, этот Gif поможет вам определить проблему

введите здесь описание изображения

Мой код реакции.

    import React, {Component} from 'react'
import './index.css'

class SampleVideo extends Component{
    state = {
        play:false,
        pause:false,
        onHover:false,
        isMouseDown:false,
        seekedPercentage:"0%"
    };
    componentDidMount(){
        this.video.addEventListener('timeupdate', this.updateProgressBar, false);
    }
    updateProgressBar = () => {
        let percentage = Math.floor((100 / this.video.duration) * this.video.currentTime);
        this.setState({
            seekedPercentage:`${percentage}%`
        });
    };
    handleVideoPausePlay = () => {
      return this.state.play ? this.pause() : this.play();
    };
    play = () => {
        this.video.play();
        this.setState({
            play:true,
            pause:false
        })
    };
    pause = () => {
        this.video.pause()
        this.setState({
            play:false,
            pause:true
        })
    };
    handleSeek = e => {
        if(this.state.isMouseDown){
            console.log("Dragginf")

            let vid_duration = e.nativeEvent.offsetX / this.seek.offsetWidth;
            let percentage = vid_duration * 100;
            this.video.currentTime = vid_duration * this.video.duration;

            this.setState({
                seekedPercentage:`${percentage}%`
            })

        }else {
            console.log('i don;t Move ')
        }
    };
    handleMouseDown = e => {
        this.setState({ isMouseDown:true })
    };
    handleMouseUp = e => {
        this.setState({ isMouseDown:false });
    };
    render(){
       // console.log(this.state);
        return(
            <div className="container">
                <div onMouseEnter={e => this.setState({onHover:true})} onMouseLeave={e => this.setState({ onHover:false })} className="video-wrapper">
                    <video ref={(c) => this.video = c} width="100%" height="100%" controls muted={true}>
                        <source src="vid/test.MKV" type="video/mp4" />
                        <source src="vid/test.MKV" type="video/ogg" />
                        Your browser does not support the video tag.
                    </video>

                    { this.state.onHover ?  <div className="video-controls-container">
                        <div className="vid-title">
                        </div>
                        <div className="vid-control">
                            <div className="vid-seekbar">
                                <div ref={s => this.seek = s} onMouseUp={this.handleMouseUp} onMouseDown={this.handleMouseDown} onMouseMove={this.handleSeek}  className="video-seek-bar">
                                    <div style={{width:this.state.seekedPercentage}} className="videobarlevelbar">
                                    </div>
                                    <div className="seekControl">
                                        <div className="seekImage"><img src="/css/0d20f779-fd6f-49e2-903a-aed7380a00a2.webp" alt="dsvds" /></div>
                                        <div className="seekRound" />
                                    </div>
                                </div>
                            </div>
                            <div className="vid-mini-controller">
                                { !this.state.play ? <div onClick={this.handleVideoPausePlay} className="play-btn">
                                    <svg height="32px" style={{enableBackground: 'new 0 0 24 32'}} version="1.1" viewBox="0 0 24 32" width="24px" xmlSpace="preserve" xmlns="https://w3.org/2000/svg" xmlnsXlink="https://w3.org/1999/xlink"><g id="Layer_1" /><g id="play"><polygon points="0,0 24,16 0,32  " style={{fill: '#fff'}} /></g></svg>
                                </div> : <div onClick={this.handleVideoPausePlay} className="pause-btn">
                                    <svg height="32px" id="svg2" width="32px" version="1.1" viewBox="0 0 32 32" xmlSpace="preserve">
                                        <g id="background">
                                            <rect height="32" width="32" fill="none"/>
                                        </g>
                                        <g id="pause">
                                            <g>
                                                <rect fill="#fff" height="24" width="8" x="20" y="4"/>
                                                <rect fill="#fff" height="24" width="8" x="4" y="4"/>
                                            </g>
                                        </g>
                                    </svg>
                                </div> }



                            </div>
                        </div>
                    </div> : "" }





                </div>
            </div>
        )
    }
}

export default SampleVideo

Ответы:


1

Я только что попробовал ваш код без части css, и он отлично работает с видео с проигрывателем html5 по умолчанию. Это работает с видео или у вас такая же проблема? Не могли бы вы опубликовать свой css, чтобы я мог попробовать?

02.11.2017
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: wedx@cp9.ru