vue中使用swiper,swiper-slide的高度很大,不能根据内容自适应怎么解决

问题描述

swiper-slide想让它根据里面内容的高度自适应,初始的时候高度显示正常,当鼠标放到swiper-slide区域内进行滚动,下面会加载出很大一部分的空白,direction不设置为direction是不会有这个问题的,为啥?

问题出现的环境背景及自己尝试过哪些方法

配置了swiper的autoHeight:true没有效果

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
html

<div class="main">
            <div class="tab">
                <div class="item fl" v-for="(tab,index) in tab" :key="tab.key" @click="tabChange(index,tab.key,'tab')">
                    <span :class="curIndex == index?'cur':''">{{tab.text}}</span>
                </div>
            </div>
            <swiper ref="mySwiper" >
                <swiper-slide>
                    <!-- 手术材料/检验/检查费用 -->
                    <div class="tab-main">
                        <div class="tab-left fl">
                            <div class="item" :class="tab1CurIndex == index?'cur':''" v-for="(item,index) in tab1" :key="item.text" @click="tabChange(index,item.text,'tab1')">
                                {{item.text}}
                            </div>
                        </div>
                        <div class="tab-right fl">
                            <div class="title"><img src="../../assets/images/fy.png" alt="">{{tab1Cur}}总计:<span>2657.88元</span></div>
                            <swiper ref="swiper1" :options="tab1Option" >
                                <swiper-slide>
                                    <!-- 手术材料 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>项目名称</td>
                                                <td>单价(元)</td>
                                                <td>数量(次)</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>血细胞分析</td>
                                                <td>20.00</td>
                                                <td>2</td>
                                                <td>40.00</td>
                                            </tr>
                                            
                                        </table>
                                    </div>
                                    
                                </swiper-slide>
                                <swiper-slide>
                                    <!-- 检查费 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>项目名称</td>
                                                <td>单价(元)</td>
                                                <td>数量(次)</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>血浆凝血酶原时间测定(PT)</td>
                                                <td>20.00</td>
                                                <td>2</td>
                                                <td>40.00</td>
                                            </tr>
                                        </table>
                                    </div>
                                </swiper-slide>
                                <swiper-slide>
                                    <!-- 化验费 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>项目名称</td>
                                                <td>单价(元)</td>
                                                <td>数量(次)</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>活化部分凝血活酶时间测定(AF)</td>
                                                <td>20.00</td>
                                                <td>2</td>
                                                <td>40.00</td>
                                            </tr>
                                        </table>
                                    </div>
                                </swiper-slide>
                                <swiper-slide>
                                    <!-- 摄片费 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>项目名称</td>
                                                <td>单价(元)</td>
                                                <td>数量(次)</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>血浆纤维蛋白原测定</td>
                                                <td>20.00</td>
                                                <td>2</td>
                                                <td>40.00</td>
                                            </tr>
                                        </table>
                                    </div>
                                </swiper-slide>
                            </swiper>
                            <!-- 总计可以在这里显示,也可以拿到下面每个盒子里面显示,样式不影响,另一个tab切换同理 -->
                        </div>
                    </div>
                </swiper-slide>
                <swiper-slide>
                    <!-- 药品/输血/输氧费用 -->
                    <div class="tab-main">
                        <div class="tab-left fl">
                            <div class="item" :class="tab2CurIndex == index?'cur':''" v-for="(item,index) in tab2" :key="item.text" @click="tabChange(index,item.text,'tab2')">
                                {{item.text}}
                            </div>
                        </div>
                        <div class="tab-right tabHeight fl">
                            <div class="title"><img src="../../assets/images/fy.png" alt="">{{tab2Cur}}总计:<span>2657.88元</span></div>
                            <swiper ref="swiper2" :options="tab2Option">
                                <swiper-slide>
                                    <!-- 输血费 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>药品名称</td>
                                                <td>规格</td>
                                                <td>单价(元)</td>
                                                <td>数量</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>注射用头孢拉定</td>
                                                <td>1gX1瓶</td>
                                                <td>1.65</td>
                                                <td>56瓶</td>
                                                <td>40.00</td>
                                            </tr>
                                            
                                        </table>
                                    </div>
                                </swiper-slide>
                                <swiper-slide>
                                    <!-- 输氧费 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>药品名称</td>
                                                <td>规格</td>
                                                <td>单价(元)</td>
                                                <td>数量</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>注射用头孢西丁钠 </td>
                                                <td>1gX1瓶</td>
                                                <td>1.65</td>
                                                <td>56瓶</td>
                                                <td>40.00</td>
                                            </tr>
                                            
                                        </table>
                                    </div>
                                </swiper-slide>
                                <swiper-slide>
                                    <!-- 西药费 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>药品名称</td>
                                                <td>规格</td>
                                                <td>单价(元)</td>
                                                <td>数量</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>硫酸庆大酶素注射液</td>
                                                <td>1gX1瓶</td>
                                                <td>1.65</td>
                                                <td>56瓶</td>
                                                <td>40.00</td>
                                            </tr>
                                            
                                        </table>
                                    </div>
                                </swiper-slide>
                                <swiper-slide>
                                    <!-- 中成药 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>药品名称</td>
                                                <td>规格</td>
                                                <td>单价(元)</td>
                                                <td>数量</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>甲硝锉片</td>
                                                <td>1gX1瓶</td>
                                                <td>1.65</td>
                                                <td>56瓶</td>
                                                <td>40.00</td>
                                            </tr>
                                            
                                        </table>
                                    </div>
                                </swiper-slide>
                                <swiper-slide>
                                    <!-- 中草药 -->
                                    <div class="content">
                                        <table>
                                            <tr>
                                                <td>药品名称</td>
                                                <td>规格</td>
                                                <td>单价(元)</td>
                                                <td>数量</td>
                                                <td>金额(元)</td>
                                            </tr>
                                            <tr v-for="i in 10" :key="i">
                                                <td>维生素C注射液</td>
                                                <td>1gX1瓶</td>
                                                <td>1.65</td>
                                                <td>56瓶</td>
                                                <td>40.00</td>
                                            </tr>
                                            
                                        </table>
                                    </div>
                                </swiper-slide>
                            </swiper>
                        </div>
                    </div>
                </swiper-slide>
            </swiper>
            <mt-tab-container v-model="active" >
                <mt-tab-container-item id="tab1">
                    
                </mt-tab-container-item>
                <mt-tab-container-item id="tab2">
                    
                </mt-tab-container-item>
            </mt-tab-container>
        </div>

js代码

export default {
    name: 'HelloWorld',
    data () {
        return {
            active:'tab1',
            tab:[
                {
                    text:'手术材料/检验/检查费用',
                    key:'tab1'
                },
                {
                    text:'药品/输血/输氧费用',
                    key:'tab2'
                }
            ],
            tab1:[
                {
                    text:'手术材料'
                },
                {
                    text:'检查费'
                },
                {
                    text:'化验费'
                },
                {
                    text:'摄片费'
                }

            ],
            tab2:[
                {
                    text:'输血费'
                },
                {
                    text:'输氧费'
                },
                {
                    text:'西药费'
                },
                {
                    text:'中成药'
                },
                {
                    text:'中草药'
                }

            ],
            curIndex:0,
            tab1Cur:'手术材料',
            tab2Cur:'输血费',
            tab1CurIndex:0,
            tab2CurIndex:0,
            hosName:'',//医院名称,
            tab1Option:{
                // direction:'vertical',
                autoHeight:true,
                observer:true,
                observeParents:true,

                on:{
                    init:function(){},
                }
            },
            tab2Option:{
                // direction:'vertical',
                autoHeight:true,
                observer:true,
                observeParents:true,
                on:{
                    init:function(){},
                }
            },
        }
    },
    methods:{
        tabChange(index,key,type){
            
            if(type == 'tab') {
                this.curIndex = index
                this.swiper.slideTo(index,1000,false)
                this.active = key
            } else if(type == "tab1"){
                this.tab1Cur = key
                this.swiper1.slideTo(index,1000,false)
            } else if(type == "tab2"){
                this.tab2Cur = key
                this.swiper2.slideTo(index,1000,false)
            }
            
        }
    },
    computed: {
        swiper() {
            return this.$refs.mySwiper.swiper
        },
        swiper1(){
            return this.$refs.swiper1.swiper
        },
        swiper2(){
            return this.$refs.swiper2.swiper
        }
    },
    mounted() {
        // current swiper instance
        // 然后你就可以使用当前上下文内的swiper对象去做你想做的事了
        this.swiper.slideTo(this.curIndex, 1000, false)
        this.swiper1.slideTo(this.tab1Cur, 1000, false)
        this.swiper2.slideTo(this.tab2Cur, 1000, false)
        //  swiper的滑动监听事件,获得当前index
        this.swiper.on('slideChange',()=>{
            this.curIndex = this.swiper.activeIndex
        })
        this.swiper1.on('slideChange',()=>{
            this.tab1CurIndex = this.swiper1.activeIndex
        })
        this.swiper2.on('slideChange',()=>{
            this.tab2CurIndex = this.swiper2.activeIndex
        })
        this.$nextTick(()=>{
            this.swiper1.direction ='vertical'
        })
        
        console.log(this.swiper1)
    },
    components:{
        tips
    }
}

你期待的结果是什么?实际看到的错误信息又是什么?

把swiper-slide下面的空白去掉,根据里面的内容自适应,
现在的效果如图

clipboard.png

阅读 6.5k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题