Vue
by antixrist
HTML
<div id="app">
<h2>Pics ({{ pics.length }}):</h2>
<main>
<div v-for="(pic, idx) in pics" :key="idx">
<img :src="pic.src"/>
<div>Loaded in: {{ pic.loadTime }} ms</div>
</div>
</main>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
main {
margin: 0 auto;
width: min-content;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 16px;
}
Vue
new Vue({
el: "#app",
async created () {
this.pics = await this.loadPics(20);
},
data: {
pics: []
},
methods: {
loadPics (picsNumber) {
//TODO: загрзузить требуемое количество src для картинок
return Promise.all(
(new Array(picsNumber))
.fill(null)
.map(async () => {
const tstart = Date.now();
const res = await fetch('https://picsum.photos/200/300');
return { src: res.url, loadTime: Date.now() - tstart };
})
);
}
}
})