UGOKのヨコチ🦖です。
前回やっと画像を表示することができたのでかなり舞い上がってます~舞の海~♪引き続きウェブアプリケーションの制作を行っていきます。概要はこちらです。
今回やること
前回は、Spotify Web APIを使って「日本トップ50」という名前のプレイリストに載っている曲のCDジャケット画像のURLを使って、html上にCDジャケット画像を1つ表示させました。
今回は、概要に記載したイメージ図のようにCDジャケット画像を9個表示させ3×3の形に並べて表示させたいと思います。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- HTML -->
<div id="app">
<button @click="getAPIdata()">APIデータの取得</button>
<ul v-if="appdata" id="appdata">
<a v-for="n in 9">
<div :id="img[n-1]">
<img v-bind:src="img[n-1]" width="350px">
</div>
</a>
</ul>
</div>
<!-- JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
let app = new Vue({
el: '#app',
data: function() {
return {
appdata: '',
item: '',
img: []
}
},
methods: {
//ボタンを押すとAPIでとったデータを表示する
getAPIdata: function() {
const self = this; //fetch内ではthisが使えないので先に定数として設定しておく
fetch('./list').then(function(res) { // /listというものに対する命令
return res.json(); //responseをjson形式で返す
}).then(function(data) {
self.appdata = data; //appdataにとってきたデータを代入する
self.item = data.items;
for (let i = 0; i < 9; i++) {
self.addURL = data.items[i].track.album.images[0].url;
self.img.push(self.addURL);
}
});
}
}
});
</script>
</body>
</html>
CDジャケット画像をクリックすることで選択したCDに関する情報を表示させるようにしたいので<a>タグを使用しました。また、v-forを使って9個のCDジャケット画像を表示させました。
#appdata {
display: grid;
grid:
grid-template-rows: 350px 350px 350px;
grid-template-columns: 350px 350px 350px;
grid-row-gap: 10px;
grid-column-gap: 10px;
justify-content: center;
}
cssでdisplay:grid;を用いて、3×3のレイアウトにしました☺
実行結果
画像が表示されて並ぶと何とも言えん嬉しさがこみ上げてきますね・・・視覚化できた嬉しさ・・・🥰やっと大きな壁part1を超えた気がします・・・(にっこし)
html上にCDジャケット画像を表示させ、並べることができたのでひとまずレイアウトをいじるのをおしまいにして、次は選択したCDジャケット画像に関する情報(ex.アーティスト名・CDタイトル・曲目)を表示できるようにしていきたいと思います。
:参考