Vueにて要素数をループで表示し、要素数に応じて横スクロールしたりしなかったりするものを作っています。
要素のサイズをmounted
で取得しているのですが、
console.log()
で
- 要素の内容を取得・表示しているのと、
- 要素の特定のプロパティ(offsetWidth)を指定して取得・表示しているのと
では結果が違います。
ちなみに$nextTickで囲んでいてもいなくても結果は同じです。
結果例として、
console
1NodeList [div.container] 2 0: div.member-container 3 ~略~ 4 offsetWidth: 288 5 ~略~ 6 length: 1 7 [[Prototype]]: NodeList 896 996
console
1NodeList [div.container] 2 0: div.member-container 3 ~略~ 4 offsetWidth: 375 5 ~略~ 6 length: 1 7 [[Prototype]]: NodeList 8168 9168
です。
ちなみに、要素の検証で対象エレメントを見ると、
プロパティを絞り込んで表示したほうではなく、全体を取得したほうの数値となります。
これってどうしてこうなるのでしょう???
動作環境は↓です。
windows10 Google Chrome (ver: 96.0.4664.45)
内容は↓です。
html
1<div class="box"> 2 <div class="container"> 3 <div v-for="(item, i) of items" class="item" :key="i"> 4 <img :src="item.src"> 5 </div> 6 </div> 7</div>
↑※itemsの数でcss のoverflow-x
によってスクロールするかしないかが変わるようにしたい
javascript
1 mounted() { 2 this.$nextTick(() => { 3 console.log(document.querySelectorAll('.container')) 4 console.log(document.querySelectorAll('.container')[0].offsetWidth) 5 console.log(document.querySelector('.container').offsetWidth) 6 }) 7 }
css
1.box { 2 text-align: center; 3} 4.container { 5 display: inline-flex; 6 max-width: 100%; 7 margin: auto; 8 overflow-x: scroll; 9} 10.item { 11 width: auto; 12 padding: 0 12px; 13} 14.item img { 15 width: 42px; 16}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。