Я пытаюсь центрироваться на холсте внутри другого и центрировать его.И я хотел бы, чтобы он был отзывчивым, это оказалось сложнее, чем я думал.
У меня есть такая структура.
<div class="photobooth"> // container
<div class="controls"> // just for the CTA btn
<button class="cta" onClick="takePhoto()">Take Photo of your ID front please. Place the document within the red border</button>
<canvas class="blurPhoto" ></canvas> // the big canvas
// небольшой холст, пользователи должны разместитьдокументы с рамкой этого холста // скрыты, просто необходимо получить данные для холста
<div class="strip">This goes to the database</div>
Мне нужен полноэкранный фон с размытием, примененным кЭто.И в центре этого размытого холста (или это может быть элемент видео, может, было бы лучше применить размытие к элементу видео и центрировать холст?), Я хочу чистый холст, отображающий квазиреальную подачу данных в реальном временина элемент видео.
Размытый фон и красная граница внутреннего холста служат для пользователя индикаторами того, где размещать документы (все это приложение является примитивным эмулятором пользовательского интерфейса Revolut KYC).
Теперь я не уверен, что лучше всего настроить все это с помощью CSS или JS.
video {
position:absolute;
top:0px;
z-index:-1;
width:10%;
height:10%;
filter :blur(1px);
display:none;
}
Здесь я скрываю видео, кажется, не имеет значения, на каком%высота и ширина установлены, JS на холсте все равно переопределяет его.
Поскольку я не могу вкладывать Canvas, здесь я не знаю, что еще делать ..
.photo { // this is the small canvas which should be centered within the big one
position:absolute;
width:50vw;
height:50vh;
border:1px red solid;
}
.blurPhoto { big canvas
position:relative;
width:100vw;
height:100vh;
filter :blur(10px);
border:1px red solid;
}
Теперь какродительский элемент .photo canvas - это div оболочки, устанавливающий позицию top: 100% не выполняет то, что я хочу, поэтому я удалил его.
Здесь я кеширую 2 canvas:
const canvas = document.querySelector('.photo');
const ctx = canvas.getContext('2d');
const canvasBig = document.querySelector('.blurPhoto');
const ctx2 = canvasBig.getContext('2d');
А вот и рфункция JS:
function paintToCanvas() {
const width = video.videoWidth;
const height = video.videoHeight;
canvas.width = width;
canvas.height = height;
return setInterval(() => {
ctx.drawImage(video, 0,
0, width, height);
ctx2.drawImage(video, 0,
0, width, height); // this is overruled by the CSS set on it
}, 16);
}
Итак, как мне заставить это работать.Должен ли я просто использовать элемент видео в качестве фона?Возможно ли иметь этот отзывчивый?
Вот ссылка на кодовый блок, я изменил некоторые CSS, но все еще не доволен.
https://codepen.io/damPop/pen/GwqxvM