Идентификатор передачи в слайд-шоу видео в Angular 12

Я создал слайд-шоу видео в своем проекте Ionic 5 Angular 12. Я также создал кнопку воспроизведения/паузы, чтобы пользователь мог воспроизводить или приостанавливать каждое видео. Но каждый раз, когда я нажимаю на одно видео, все видео воспроизводятся, а не только одно. Думаю, мне нужно передать идентификатор видео функции воспроизведения/паузы .ts, верно? Или есть другой способ?

HTML. media - это параметры видео (объекта), такие как идентификатор, имя и т. д.

<ion-slide *ngFor = "let media of medias | filterByType: mediaType; let i = index">
<ng-container>
<div class = "container" (click) = "playVideo()">
    <video autoplay = "autoplay" webkit-playsinline = "true" playsinline = "true"
       onloadedmetadata = "this.muted=true" class = "fillWidth" preload = "metadata" 
       #video>
        <source [src] = "media?.image_path" [type] = "'video/webm'">
        <source [src] = "media?.image_path" [type] = "'video/mp4'">
        <source [src] = "media?.image_path" [type] = "'video/ogg'">
    </video>
 </div>
 </ng-container>
 </ion-slide>

.тс

export class HomePage implements OnInit {
@ViewChild('video') myVideo: ElementRef;

  isplay = false;


 playVideo(){
    if (this.isplay){
        this.myVideo.nativeElement.pause();
    }
    else{
        this.myVideo.nativeElement.play();
    }  
    this.isplay=!this.isplay
  }

Любая помощь? Спасибо

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы по-прежнему можете использовать код js в своем проекте и напрямую обращаться к DOM (не забывайте использовать его с осторожностью). Попробуйте что-то вроде:

<ion-slide *ngFor = "let media of medias | filterByType: mediaType; let i = index">
<ng-container>
<div class = "container" (click) = "playVideo('video'+i)">
    <video autoplay = "autoplay" webkit-playsinline = "true" playsinline = "true"
       onloadedmetadata = "this.muted=true" class = "fillWidth" preload = "metadata" 
       [id] = "'video'+i">
        <source [src] = "media?.image_path" [type] = "'video/webm'">
        <source [src] = "media?.image_path" [type] = "'video/mp4'">
        <source [src] = "media?.image_path" [type] = "'video/ogg'">
    </video>
 </div>
 </ng-container>
 </ion-slide>

.тс:

 playVideo(id: string){
        if (this.isplay){
            (document.getElementById(id) as HTMLMediaElement).pause();
        }
        else{
            (document.getElementById(id) as HTMLMediaElement).play();
        }  
        this.isplay=!this.isplay
      }

У вас есть много элементов, поэтому, вероятно, вам нужно сохранить isplay для каждого из них или приостановить предыдущее видео перед воспроизведением нового.

Да, хорошая мысль, но, как вы сказали, вы должны использовать ее с осторожностью. Я получаю сообщение «Игра свойств не существует в HTMLElement».

SimonIoa 24.11.2022 17:50

и id (id:HTMLElement) я получаю. Аргумент типа «HTMLElement» не может быть назначен параметру типа «string».ts(2345)

SimonIoa 24.11.2022 17:59

Это было больше похоже на концепт. Я обновил ответ, чтобы исправить первый комментарий. Я не знаю, к какой строке относится вторая ошибка.

Drazu 24.11.2022 19:05

Извини, Дразу, ты тоже это видишь? это для пользовательских игроков stackoverflow.com/questions/74565766/…

SimonIoa 24.11.2022 21:21

Другие вопросы по теме