|
- <meta charset="utf-8"/>
-
- <link rel="stylesheet" href="/pico.css" />
-
- <style>
- body {
- margin: 0;
- }
- .media {
- position: fixed;
- top: 50;
- left: 100;
- width: 800;
- height: 300;
- background-color: crimson;
- padding: 1em;
- overflow: hidden;
- resize: both;
- }
- .videos {
- --pad: 3px;
- grid-gap: var(--pad);
- padding: var(--pad);
- height: calc(100% - 2 * var(--pad));
- background-color: royalblue;
- }
- </style>
-
- <body>
- <div class="media">
- <div class="videos">
- <div class="video-container mirror">
- <video autoplay></video>
- </div>
- <div class="video-container mirror square">
- <video autoplay></video>
- </div>
- <div class="video-container mirror">
- <video autoplay></video>
- </div>
- </div>
- </div>
- </body>
-
- <script>
- navigator.mediaDevices.getUserMedia({audio: false, video: true})
- .then(stream => document.querySelectorAll('video')
- .forEach(video => video.srcObject = stream))
- </script>
- <script>
- const doOne = ({target}) => target.style.setProperty('--height', `${target.clientHeight}px`)
- const doAll = (entries) => entries.forEach(doOne)
- sizer = new ResizeObserver(doAll)
- document.querySelectorAll('.video-container').forEach(el => sizer.observe(el))
- document.querySelectorAll('.video-container').forEach(el =>
- el.onclick = (ev) => el.classList.toggle('full-screen'))
- </script>
|