像标准视频播放器一样在一段时间后隐藏叠加层

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了像标准视频播放器一样在一段时间后隐藏叠加层相关的知识,希望对你有一定的参考价值。

我正在制作自定义视频播放器,其中有一个包含视频播放器控件的覆盖图

我的播放器开始在全长和高度上工作。

现在我要在5秒钟后将鼠标停在上方以隐藏覆盖物。

现在的问题是,当以下功能鼠标悬停在.ts文件中时,计时器的同步受到损害。

因此,如果我连续移动鼠标,则覆盖层开始闪烁。

请为我提供解决问题的方法。

以下是我的html代码

<div class="video-container" #videoFullscreen>
    <div class="video-wrapper" mouse-move>
      <video class="video video-js" data-dashjs-player  id="myVideo"  autoplay #videoPlayer>
        <source src=" videoSource " type="video/mp4" />
      </video>


      <!-- overlay -->
      <div class="overlay" [class.hideOverlay]="hideTop">  
        <!-- top controls  -->
          .
          .
          <!-- lower controls  -->

        </div>
      </div>

这是我的类型脚本代码

@HostListener('document:mousemove', [ '$event' ]) //fuction to display and hide element sue to mouseover
    onMouseMove($event) 
            this.hideTop = false;
            setTimeout(() => 
                this.hideTop = true;
            , 5000);
    

这是我的CSS代码:

.overlay 
    display: flex;

.hideOverlay 
    display:none;

请帮助我解决这个问题。

答案

我将使用rxjs来解决此问题,如下所示:

ngOnInit(): void 
    fromEvent<MouseEvent>(document, 'mousemove').pipe(tap(() => 
      console.log("show it!");
      this.hideTop = false
    ), switchMap((event) =>
      timer(5000).pipe(tap(() => 
        console.log("hideit");
        this.hideTop = true;
      ))
    )).subscribe();
  

如果您的组件被破坏以防止内存泄漏,请不要忘记取消订阅!

另一答案

存储lastHover时间并与之进行比较。

private lastHover = 0;
@HostListener(...)
onMouseMove($event) 
    this.lastHover = new Date().getTime()
    This.hideTop = true;
    setTimeout( () => 
        ...
        if(lastHover + 5000 < new Date().getTime()) 
            This.hideTop = true;
        
    , 5000)

以上是关于像标准视频播放器一样在一段时间后隐藏叠加层的主要内容,如果未能解决你的问题,请参考以下文章

iPhone/iPad 上的视频控制叠加

b站进度条上面的波浪怎么关

通过单击图像叠加开始自动播放视频。需要为多个视频工作

像表格视图单元格一样的藤蔓开始播放视频总是很慢

旋转屏幕或隐藏播放器时 Android YouTube API 视频暂停

使用具有 100% 高度的颜色叠加层的背景视频