分割そして挿入
Warning: Attempt to read property "site_name" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 208
Warning: Attempt to read property "title" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 211
Warning: Attempt to read property "description" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 217
Warning: Attempt to read property "site_name" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 208
Warning: Attempt to read property "title" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 211
Warning: Attempt to read property "description" on bool in /home/goodhokkaido/sixwheel.net/public_html/muguruma/wp/wp-content/themes/frame/functions.php on line 217
swiperの.swiper-slideを動的に追加する
案件で、カルーセルのような動きを実装する必要がありそうだったので、ネットで調べました。発見があったので、メモ。ヒーローエリアではない、ちょっとしたスライド項目があり、どう実装しようか思案。既にヒーローエリアで導入されていたので、カスタマイズも可能なswiperを使用することにしました。その際、.swiper-slideを動的に追加する必要があり、試行錯誤すること数日。下記を参考に配列を分割し、divに挿入して、なんとか動きました。
もっと見るボタンをつくったjsを流用して作成します。下記js以外にも、html、css、jsが必要ですが、それらは割愛。swiperが動く環境であれば、大丈夫なハズです。jsが長いので、編集の都合により、分割します。本来は下記すべて同じ、jsに記載されます。前半は.swiper-slideを格納する.swiper-wrapperの取得、外部からのデータ取り込みを行っています。numberは一つのdiv.swiper-wrapperにいくつ表示するかの設定です。
const listArea = document.querySelector(".swiper-wrapper");
const number = 3;
getData()
.then((list) => {
displayList(list);
})
.catch((err) => {
console.log(err);
});
async function getData() {
const data = await fetch(
"https://url"
);
return await data.json();
}
後半は表示の制御。参考にしたブログのように、配列をnumberの数にあわせて再構成し、[0]{1, 2, 3}[1]{1,2,3}・・・のような感じ整形します。その配列の数だけ、divを作り、クラスにswiper-slideを付与。1つの配列に3つのオブジェクトが入っているので、それらをhtml化し顕現させdivに追加、最後にswiper-wrapperにぶち込んでやるだけ。n個に分割するロジックを参考にすると、案外簡単にできました。あっ、displayListにawaitが無い。なんで、まともに動いているんだろう。そして、エスケープを今回も忘れました。
async function displayList(list) {
const length = Math.ceil(list.length / number);
const processingList = new Array(length).fill().map((_, i) => {
return list.slice(i * number, (i + 1) * number);
});
processingList.forEach((items) => {
const divTag = document.createElement("div");
divTag.className = "swiper-slide";
const box = items
.map((item) => {
return `
<section class="list__box">
<figure class="opacityTargets" class="listImg__wrap">
<img src="${item.image}" alt="${item.title}" class="listImg__img" />
</figure class="opacityTargets">
<div class="listTxt__wrap">
<h2 class="listTxt__ttl">${item.title}</h2>
<p class="listTxt__txt">${item.text}</p>
</div>
</section>
`;
})
.join("");
divTag.innerHTML += box;
listArea.appendChild(divTag);
});
}
コメント
選曲
The Moldau