【问题标题】:Adding inner divs on bottom -right corner of a video在视频的右下角添加内部 div
【发布时间】:2020-08-21 13:59:35
【问题描述】:

我正在使用 Nodejs、socket.io 和 WebRTC(peerjs 库)开发视频聊天应用程序。在登录页面上,用户插入他/她的名字并被重定向到他的视频流(通过 WebRTC)并可以与他的同行连接的页面。这工作正常,视频正在 DOM 中动态添加。一旦每个同伴加入,我想使用 Javascript 在他/她的视频的右下角动态附加每个登录用户的名称。

在下面的函数中,我添加了一个静态名称,仅用于调试目的

JavaScrpt 函数

//Function that appends all the videos to the DOM (Working fine)
const videoGrid = document.getElementById('video-grid');

const addVideoStream = (video, stream) => {
    video.srcObject = stream
    video.addEventListener('loadedmetadata', () => {
      video.play()
    })
    videoGrid.append(video)
    //Here I create a div, add the name in it and append on top of video
    const testName = "John Doe"
    const div = document.createElement('div');
    div.classList.add('video-name');
    const html = `
    <i class="fas fa-microphone"></i>
    <span>${testName}</span>
     `
    div.innerHTML = html;
    video.appendChild(div);
}

标记

<div class="main__videos">
<div id="video-grid">
    {/* Add videos dynamically via Js */}
</div>
</div>

CSS

//CSS
//Parent Container that holds all videos
#video-grid{
    display: flex;
    width: 1090px;
    overflow-y: auto;
    flex-wrap: wrap;
    position: relative;
 }

 //Each video
 video{
    height: 250px;
    width: 350px;
    object-fit: cover;
    padding: 8px;
    position: relative;
 }
  
 //Name styles that are being added dynamically
 .video-name {
    justify-content: end;
    position:absolute;
    left: 0;
    z-index:1;
    color: red;
    background-color: orange;
}

【问题讨论】:

    标签: javascript css webrtc peerjs


    【解决方案1】:

    我想出了一个可能的解决方案。您在发布的代码中缺少很多 ;,但我认为如果您的功能正常工作,它们会正确发布在那里。

    在这里,我创建一个虚拟的&lt;div class="video"&gt;&lt;/div&gt; 元素用于测试目的,而不是创建一个&lt;video&gt; 标记元素。另外我更改了 javascript 的顺序,所以首先我声明了添加视频和内部 div 的函数,然后我创建了一个带有空流的虚拟视频元素,接下来我调用了该函数。

    在函数内部,我首先获取videoGrid 元素并按照您的方式运行代码。

    我还相应地更改了 css 代码以使用 &lt;div class="video"&gt; 元素而不是 &lt;video&gt; 标记,并更改了 video-namevideo 元素的一些属性。

    //Function that appends all the videos to the DOM (Working fine)
    
    const addVideoStream = (video, stream) => {
      const videoGrid = document.getElementById('video-grid');
      video.srcObject = stream;
      video.addEventListener('loadedmetadata', () => {
        video.play();
      })
      videoGrid.append(video);
      //Here I create a div, add the name in it and append on top of video
      const testName = "John Doe";
      const div = document.createElement('div');
      div.classList.add('video-name');
      const html = `
        <i class="fas fa-microphone"></i>
        <span>${testName}</span>
         `;
      div.innerHTML = html;
      video.appendChild(div);
    }
    
    const video = document.createElement('div');
    video.classList.add('video');
    const html = 'A video';
    video.innerHTML = html;
    addVideoStream(video,null);
    #video-grid {
      display: flex;
      width: 1090px;
      overflow-y: auto;
      flex-wrap: wrap;
      position: relative;
      
      /* Added properties */
      background-color: rgba(0,0,0,0.5);
      color: black;
    }
    
    .video {
      height: 250px;
      width: 350px;
      object-fit: cover;
      padding: 8px;
      position: relative;
      
      /* Added properties */
      border: dashed 1px black;
    }
    
    .video-name {
      /* justify-content: end; <------- Removed */
      position: absolute;
      /* left: 0; <------- Removed */
      z-index: 1;
      color: red;
      background-color: orange;
      
      /* Added properties */
      bottom: 0;
      right: 0;
      width: 50%;
    }
    <div class="main__videos">
      <div id="video-grid">
      The grid
      </div>
    </div>

    【讨论】:

    • ,,感谢您的帮助,将测试您的解决方案并尽快回复您结果
    • 在一个带有流的实际视频中,名称没有显示,很可能它出现在流的后面
    • @Pweb 在这种情况下尝试在css 配置中使用z-index: 1000 !important;,以便它出现在其他所有内容之上。另外,请使用浏览器的开发人员工具检查代码,如果元素已创建以及是否存在,请告诉我,以便我们检查问题所在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多