VideoFeed: Hide video temporarily on window resize

This commit is contained in:
Noah 2025-06-14 14:57:04 -07:00
parent 33d91ddcda
commit fdef3dafdc

View File

@ -31,10 +31,17 @@ export default {
// Mutation Observer, to detect if the user deletes the QR code via dev tools. // Mutation Observer, to detect if the user deletes the QR code via dev tools.
observer: null, observer: null,
// Window resize debouncer: temporarily hide videos after a resize event, so e.g.,
// if dev tools are opened and the debugger detector kicks in, videos may be hidden
// while the page is paused.
windowResizeTimer: null,
windowResizeCooldown: false,
}; };
}, },
mounted() { mounted() {
this.initWatermarkObserver(); this.initWatermarkObserver();
this.initWindowResizer();
}, },
beforeUnmount() { beforeUnmount() {
this.observer?.disconnect(); this.observer?.disconnect();
@ -201,6 +208,20 @@ export default {
onWatermarkRemoved() { onWatermarkRemoved() {
this.$emit('watermark-removed', this.username); this.$emit('watermark-removed', this.username);
}, },
initWindowResizer() {
window.addEventListener('resize', this.onWindowResized);
},
onWindowResized() {
if (this.windowResizeTimer !== null) {
clearTimeout(this.windowResizeTimer);
}
this.windowResizeCooldown = true;
this.windowResizeTimer = setTimeout(() => {
this.windowResizeCooldown = false;
this.windowResizetimer = null;
}, 1000);
},
} }
} }
</script> </script>
@ -216,7 +237,8 @@ export default {
disablepictureinpicture disablepictureinpicture
playsinline playsinline
oncontextmenu="return false;" oncontextmenu="return false;"
:muted="localVideo"></video> :muted="localVideo"
:class="{'invisible': windowResizeCooldown}"></video>
<!-- Watermark layer --> <!-- Watermark layer -->
<div :class="{'is-no-watermark': isNoWatermark}" ref="watermarkLayer"> <div :class="{'is-no-watermark': isNoWatermark}" ref="watermarkLayer">
@ -300,6 +322,9 @@ video {
.seethru { .seethru {
opacity: 0.4; opacity: 0.4;
} }
.invisible {
visibility: hidden;
}
/* Watermark image */ /* Watermark image */
.is-no-watermark { .is-no-watermark {