У меня есть два контейнера, которые перемещаются с медиа-запросом.Когда они перемещаются, я использую matchMedia, чтобы вызвать событие, которое вызывает перемещение div из одного контейнера в другой.
CodePen
Проблема возникает, когда я обновляюстр.Медиа-запрос css работает, но matchMedia работает только при изменении запроса.Если вы перезагрузите кодовое поле шириной менее 1000 пикселей, вы увидите проблему.
У меня был поиск и чтение нескольких ответов, но я новичок в JS и опасаюсь того, что я должен и не долженне звоните (особенно когда дело доходит до прослушивания изменений размера).
Должен ли я просто использовать enquire.js?Я читал, что у него нет этой проблемы.Или есть простое исправление?
<header>
<div class="container" id="container1">
<div class="item">1</div>
<div class="item" id="moveMe">2</div>
<div class="item" id="item3">3</div>
</div>
<div class="container" id="container2">
<div class="item" id="item4">4</div>
</div>
</header>
css
header{
display: flex;
justify-content: space-around;
align-items: center;
width: 100%;
padding: 1rem;
background: #eaeaea;
}
@media (max-width: 1000px){
header{
flex-direction: column;
}
}
.container{
display: flex;
padding: 2rem;
}
#container1{
background: red;
}
#container2{
background: blue;
}
.item{
padding: 2rem;
margin: 2rem;
background: white;
}
js
var container1 = document.getElementById('container1');
var container2 = document.getElementById('container2');
var moveMe = document.getElementById('moveMe');
var item3 = document.getElementById('item3');
var item4 = document.getElementById('item4');
matchMedia("(max-width: 1000px)").addListener(function(mql){
if(mql.matches){
container2.insertBefore(moveMe, item4);
} else {
container1.insertBefore(moveMe, item3);
}
})
* edit: предложение RE i.terrible Я пытался разделитькод, чтобы я мог запустить его на window.onload.
var mql = window.matchMedia("(max-width: 1000px)").addListener(checkMedia);
window.onload = checkMedia(mql);
function checkMedia(mql){
if(mql.matches){
container2.insertBefore(moveMe, item4);
} else {
container1.insertBefore(moveMe, item3);
}
}
хотя он не работал ...
* edit2: Ах ... это работает.Я запутался выше.
var mql = window.matchMedia("(max-width: 1000px)");
checkMedia(mql);
mql.addListener(checkMedia);
function checkMedia(mql){
if(mql.matches){
container2.insertBefore(moveMe, item4);
} else {
container1.insertBefore(moveMe, item3);
}
}