WordPress に Vue.js を スモールスタートで入れてみる その7
とあるサイトでVue.jsで作っていて、公開してからもろもろやったことまとめ その7
最後は細かいテクニック的なところについて
ローディング
API から投稿データ取得するまでローディング、取得後に解除する
DOM更新後にローディング解除したいので $nextTick
を使う
mounted: function () { this.$nextTick(function () { // 処理 }) }
loading.vue
<template> <transition name="fade"> <template v-if="!loading"> <p>loading</p> </template> <template v-else> <child-component></child-component> </template> </transition> </template> <script> import ChildComponent from './childComponent'; export default { components: { ChildComponent }, data() { return { loading: true } }, mounted: function () { this.$nextTick(function () { this.loading = false; }) } }; </script>
配列からオブジェクトへ変換
array
[ [ "https://siteUrl/image01.jpg", 1718, 1150, false ], [ "https://siteUrl/image02.jpg", 896, 1248, false ], [ "https://siteUrl/image03.jpg", 1722, 1148, false ] ]
を
formattedArray
[ { "src": "https://siteUrl/image01.jpg", "w": 1718, "h": 1150 }, { "src": "https://siteUrl/image02.jpg", "w": 896, "h": 1248 }, { "src": "https://siteUrl/image03.jpg", "w": 1722, "h": 1148 } ]
にしたい
array.forEach(function(v){ const temp = { src: v[0], // 画像URL w: v[1], // 横幅 h: v[2] // 縦幅 }; formattedArray.push(temp) });
とすると formattedArray
は欲しいフォーマットになる
ループでランダムな数値をつける
最初にデータの整形とランダム数値の付与
imagesArray
[ "https://siteUrl/image01.jpg", "https://siteUrl/image02.jpg", "https://siteUrl/image03.jpg" ]
を
imagesObject
[ { "src": "https://siteUrl/image01.jpg", "delay": "0.20" }, { "src": "https://siteUrl/image02.jpg", "delay": "0.47" }, { "src": "https://siteUrl/image03.jpg", "delay": "0.72" } ]
にしたい。
ここも forEach
だけど、他のやり方がありそう
const imagesObject = []; imagesArray.forEach((value) => { const delayRandomNum = (Math.random() * 1 + 0).toFixed(2); // 0 〜 1 までの乱数(小数点2桁に丸める)をアニメーション遅延させる imagesObject.push({ src: value, delay: delayRandomNum }) }); this.imagesObject = imagesObject
オブジェクトを作成処理ができたら <template>
箇所で
<template> <div v-for="(image, index) in imagesObject" :key="index" > <img :src="image.src" :style="{ transitionDelay: image.delay + 's' }" > </div> </template>
とする。HTMLは
<div><img src="https://siteUrl/image01.jpg" style="transition-delay: 0.20s;"></div> <div><img src="https://siteUrl/image02.jpg" style="transition-delay: 0.47s;"></div> <div><img src="https://siteUrl/image03.jpg" style="transition-delay: 0.72s;"></div>
となるのであとはcssで調整