完成固定footer布局后,我想要在footer中添加几个按钮,来控制中间部分显示的页面,相似微信。所以我须要实现一个tab切换的功能,我这里用到了Weex提供的<slider>
组件。vue
<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的一篇文章总结了经常使用的隐藏方式,其中我尝试过前面三种,均无效。app
display:flex
是默认值,没法修改。所以不能使用display:none
的方式隐藏元素。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做为函数参数。