Tab页切换
完成固定footer布局后,我想要在footer中添加几个按钮,来控制中间部分显示的页面,类似微信。因此我需要实现一个tab切换的功能,我这里用到了Weex提供的<slider>
组件。
<template>
<div class="wrapper">
<slider class="tab-container" auto-play="false" v-bind:index="sel" v-on:change="slideChange">
<div class="tab tab1">
<text>sel={{sel}}</text>
</div>
<div class="tab tab2"><text>sel={{sel}}</text></div>
<div class="tab tab3"><text>sel={{sel}}</text></div>
</slider>
<div class="footer">
<a class="button" v-on:click="sel=0"><text>t1</text></a>
<a class="button" v-on:click="sel=1"><text>t2</text></a>
<a class="button" v-on:click="sel=2"><text>t3</text></a>
</div>
</div>
</template>
<script>
import Files from "@/components/Files";
export default {
name: "App",
components: {
Files
},
data() {
return {
sel: 0
};
},
methods: {
slideChange: function(nindex) {
// console.log(nindex)
this.sel = nindex.index
}
}
}
</script>
<style scoped>
.wrapper {
/* justify-content: center; */
background-color: azure;
flex-direction: column;
width: 750px;
/* align-items: center; */
}
.tab-container {
background-color: beige;
width: 750px;
flex: 1;
}
.slide {
width: 750px;
}
.tab {
width: 750px;
flex: 1;
}
.tab1 {
background-color: darkcyan;
}
.tab2 {
background-color: darkgoldenrod;
}
.tab3 {
background-color: darkgreen;
}
.footer {
background-color: rgba(255, 255, 0, 1);
width: 750px;
height: 100px;
flex: 0;
border-radius: 10px 10px 0 0;
padding: 5px 5px 5px 5px;
flex-direction: row;
}
.button {
border-width: 2px;
width: 250px;
}
</style>
最终实现效果包括通过左右滑动切换tab页,也可以通过下方按钮点击来切换tab页面。
总结
实现tab页切换,一开始我的思路是多个div包含页面,隐藏不需要显示的div。并通过一个参数来选择需要显示的div。CSDN的一篇文章总结了常用的隐藏方式,其中我尝试过前面三种,均无效。
- Weex中,
display:flex
是默认值,无法修改。因此不能使用display:none
的方式隐藏元素。 - Weex支持
overflow:hidden
。但一个问题是它貌似对vue的class绑定支持有问题。<div v-bind:class="hide: sel !=2" class="tab tab2"><text>sel={{sel}}</text></div>
来选择时,可以在调试器中看到div
包含了hide
类,但是hide
类中的overflow:hidden
样式并未生效(firefox调试器中无法看到该样式)。使用长宽设为0的方案存在同样的问题。暂未在文档中找到相关情况的说明。 -
<slider>
的change
事件,文档中写包含index参数的意思是它的参数是一个object,index是这个object的一个对象。而不是以index作为函数参数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。