vue.jsを最近はじめました。
調べながら作成したのですが、どうしても2つ解決できないので、
よければアドバイスいただけると嬉しいです。
(1) tableのtdの高さが可変するため、高さを合わせるために一番高いサイズを取得し、そのサイズをcssで設定しようとしましたが、うまく出来ませんでした。
- tableが3つあり、横に並んでいます。
- msg1、msg2、msg3がある時、メッセージが表示されるようになっています。ここで、表示・非表示により高さが可変します。
テンプレート側
<template> <!--テーブル1--> <table> <td ref="box.content1"> あいうえお <p v-if="msg1">{{ msg1 }}</p> </td> <td> あいうえお </td> </table> <!--テーブル2--> <table> <td ref="box.content2"> かきくけこ <p v-if="msg2">{{ msg2 }}</p> </td> <td> かきくけこ </td> </table> <!--テーブル3--> <table> <td ref="box.content3"> さしすせそ <p v-if="msg3">{{ msg3 }}</p> </td> <td> さしすせそ </td> </table> </template>
vue側(new Vueなど、いろいろ省略しています。vueは実行できている状態です。)
data() { return { msg1: '', msg2: '', msg3: '', box: { content1: '', content2: '', content3: '', }, } }, watch: { 'box.content1': function () { this.adjustHeight(); }, 'box.content2': function () { this.adjustHeight(); }, 'box.content3': function () { this.adjustHeight(); }, }, methods: { adjustHeight() { let h = []; h[0] = this.$refs['box.content1'].clientHeight; h[1] = this.$refs['box.content2'].clientHeight; h[2] = this.$refs['box.content3'].clientHeight; let max = Math.min.apply(null, h); this.$refs['box.content1'].style.height = max; this.$refs['box.content2'].style.height = max; this.$refs['box.content3'].style.height = max; }, }
特にエラーも表示されないのですが、、何がダメなのでしょうか、、、
(2) ブロックをforでループして表示しています。そのブロックに追加ボタンを設定して、jQueryのslideToggle()のような動きを目指していました。
transition-groupというのがあったので、ピッタリだと思い設定したのですが、cssでうまく設定できません。
テンプレート側
<template> <div id="list-demo"> <button @click="addBox">追加</button> <transition-group name="list" tag="p"> <div v-for="(boxVal, boxIndex) in boxValues" :key="boxIndex" class="list-item"> <p>{{ boxVal }}<p> <!-- その他表示したい要素を設定しています --> <button @click="removeBox(boxIndex)">削除</button> </div> </transition-group> </div> </template>
vue側(new Vueなど、いろいろ省略しています。vueは実行できている状態です。)
data() { return { boxValues: [ {'1':'増1'}, {'2':'増2'}, ], } }, methods: { addBox() { this.boxValues.push({'n':'増n'}); }, removeBox(index) { this.boxValues.splice(index, 1); } },
CSS(Vue.jsの公式のCSSほぼその設定です。)
<style> .list-enter-active, .list-leave-active { transition: all 0.5s; } .list-enter, .list-leave-to { opacity: 0; transform: translateY(-10px); } </style>
translateYの設定値を変えたりしているのですが、slideToggle()のような、ぬるっと出るような動きができません、、、、
もしければアドバイスいただけないでしょうか。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/24 13:41