я хочу добиться такого поведения из этого примера с изображениями https://codepen.io/ryanfinni/pen/jONBEdX. Единственная разница заключается в том, что вместо переключения видимости img для каждого div, который он находится в поле зрения, я хочу вызвать конечную точку, чтобы получить данные и сформировать html, отправив соответствующий идентификатор данных в качестве параметра.
то, что у меня есть, работает только для первого элемента. как я могу заставить его работать для всех элементов, которые у меня есть, и нацеливать их по идентификатору данных, как в этом примере с data.src
function handleIntersection(entries) {
entries.map((entry) => {
if (entry.isIntersecting) {
entry.target.src = entry.target.dataset.src;
entry.target.classList.add('loaded')
observer.unobserve(entry.target);
}
});
}
вот мой код
const LIST = document.querySelector('.city-list');
async function getData() {
try {
let response = await fetch('https://raw.githubusercontent.com/ashes27/infinite/master/ids.json');
if (response.status == 200) {
let data = await response.json();
return data;
} else {
throw new Error(response.status);
}
} catch (error) {
console.log(error);
}
}
getData().then((data) => {
for (const details in data.data.items) {
const LI = document.createElement('li');
const TITLE = document.createElement('h2');
TITLE.className = 'city-title';
TITLE.innerText = data.data.items[details].title;
LI.appendChild(TITLE);
LIST.appendChild(LI);
for (const id in data.data.items[details].ids) {
const DIV = document.createElement('div');
DIV.setAttribute('data-id', data.data.items[details].ids[id]);
DIV.className = 'wrapper';
const markup = `
<div class="city-wrapper" >
<div class="result-wrapper">
<div class="image-wrapper">
<img src=""/>
</div>
<div class="content-wrapper">
<div class="content-info">
<div class="info-wrapper">
<h2></h2>
<span class="address"></span>
</div>
</div>
<p class="description"></p>
</div>
</div>
</div>
</div>
`;
DIV.innerHTML = markup;
LI.appendChild(DIV);
}
}
});
var observer = new IntersectionObserver(
function (entries) {
if (entries[0].isIntersecting === true) {
observer.unobserve(document.querySelector('.city-list'));
const getInfo = async function (post) {
let infoResponse = await fetch('https://raw.githubusercontent.com/ashes27/infinite/master/single-item.json');
let info = await infoResponse.json();
return info;
};
getInfo().then((info) => {
console.log(info);
let itemsInfo = info.data.items;
const DIV = LIST.querySelector('.wrapper');
console.log(DIV);
const markup = `
<div class="city-wrapper" >
<div class="result-wrapper">
<div class="image-wrapper">
<img src="${itemsInfo.mainImgUrl}"/>
</div>
<div class="content-wrapper">
<div class="content-info">
<div class="info-wrapper">
<h2>${itemsInfo.visitTitle}</h2>
<span class="address">${itemsInfo.address}</span>
</div>
</div>
<p class="description">${itemsInfo.mainDescription}</p>
</div>
</div>
</div>
</div>
`;
DIV.innerHTML = markup;
});
}
},
{ threshold: [0] }
);
observer.observe(document.querySelector('.city-list'));
.city-wrapper {
height: 440px;
}
img {
width: 400px;
}
<div style="height: 400px;"></div>
<div style="height: 400px;"></div>
<div style="height: 400px;"></div>
<div style="height: 400px;"></div>
<div style="height: 400px;"></div>
<div style="height: 400px;"></div>
<div style="height: 400px;"></div>
<div style="height: 400px;"></div>
<ul class="city-list">
</ul>
заранее спасибо!
.city-list
с окном просмотра. Но вы хотите знать, когда какой-либо изli
элементов в списке станет (или вот-вот станет) видимым. - person Andreas   schedule 31.07.2020[0]
за порог?0
- значение по умолчанию, и вам не нужен массив, если есть только одно значение - person Andreas   schedule 31.07.2020<li>
к наблюдателю вместо<ul>
- person Andreas   schedule 31.07.2020