达摩封臣 發表於 2021-1-8 14:44:00

uni-app 自定义 简单 底部tab

<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/2237618/202101/2237618-20210108143949861-1868270668.png" alt="" loading="lazy"></p>
<p class="md-end-block md-p md-focus"><span class="md-plain">项目地址:https://gitee.com/jielov/uni-app-tabbar</span></p>
<p>&nbsp;</p>
<p class="md-end-block md-p"><span class="md-plain">先创建三个页面 分别为 home.vue , classify.vue, my.vue 。 以下为基础样式</span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/2237618/202101/2237618-20210108144027177-620826450.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p">&nbsp;</p>
<p class="md-end-block md-p">创建一个 base_tab 为主页面,在base_tab 引入先前创建好的三个页面,关于组件的引用可自行去官网查看</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">导入组件</span>
import Home from '@/components/home'<span style="color: rgba(0, 0, 0, 1)">
import Classify from </span>'@/components/classify'<span style="color: rgba(0, 0, 0, 1)">
import My from </span>'@/pages/index/index'<span style="color: rgba(0, 0, 0, 1)">

export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
    components: {
            Home,
            Classify,
            My
    }
}</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">导入组件之后,先让组件在页面上显示出来,然后在开始在页面布局</span></p>
<p class="md-end-block md-p"><span class="md-plain">v-if 里的current 是在data里定义的,初始值为0 </span></p>
<p class="md-end-block md-p"><span class="md-plain">v-if="current == 0" ,current 可以理解为id,根据id == 几来显示页面</span></p>
<p class="md-end-block md-p"><span class="md-plain">当子页面在父页面 显示出来后,开始定义底部tab样式</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">="height: 90vh;"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 三个子页面 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Home </span><span style="color: rgba(255, 0, 0, 1)">v-if</span><span style="color: rgba(0, 0, 255, 1)">="current == 0"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Home</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Classify </span><span style="color: rgba(255, 0, 0, 1)">v-if</span><span style="color: rgba(0, 0, 255, 1)">="current == 1"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Classify</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">My </span><span style="color: rgba(255, 0, 0, 1)">v-if</span><span style="color: rgba(0, 0, 255, 1)">="current == 2"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">My</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 底部tab样式 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="tab"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 循环 tabbar里面的数据 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">block </span><span style="color: rgba(255, 0, 0, 1)">v-for</span><span style="color: rgba(0, 0, 255, 1)">="(item,index) in tabbar"</span><span style="color: rgba(255, 0, 0, 1)"> :key</span><span style="color: rgba(0, 0, 255, 1)">="index"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="tab_tiem"</span><span style="color: rgba(255, 0, 0, 1)"> :class</span><span style="color: rgba(0, 0, 255, 1)">=""</span><span style="color: rgba(255, 0, 0, 1)"> :data-index</span><span style="color: rgba(0, 0, 255, 1)">="index"</span><span style="color: rgba(255, 0, 0, 1)"> @tap</span><span style="color: rgba(0, 0, 255, 1)">="tabSwitch"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="item_img"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">image </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="image"</span><span style="color: rgba(255, 0, 0, 1)"> :src</span><span style="color: rgba(0, 0, 255, 1)">="current != index ? item.img :item.slectImg "</span><span style="color: rgba(255, 0, 0, 1)"> mode</span><span style="color: rgba(0, 0, 255, 1)">=""</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="item_name"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
                  {{item.text}}
               </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
               <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>tab 显示的图标 以三元运算来进行 判断 是否选中状态</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">&lt;image class="image" :src="current != index ? item.img :item.slectImg " mode=""&gt;&lt;/image&gt;
</pre>
</div>
<p>&nbsp;@tap="tabSwitch" 点击事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">export default {
    methods: {
      tabSwitch(e) {
            console.log(e);
            let index = e.currentTarget.dataset.index
            this.current = index
      }
    },
}</span></pre>
</div>
<p>循环 tabbar 数据</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">export default {
      data() {
            return {
                current: 0,
                tabbar: [{
                        img: '../../static/tab/home.png',//未选中
                        slectImg: '../../static/tab/home_select.png', //已选中
                        text: '首页',
                  },
                  {
                        img: '../../static/tab/classify.png',
                        slectImg: '../../static/tab/classify_select.png',
                        text: '分类',
                  },
                  {
                        img: '../../static/tab/my.png',
                        slectImg: '../../static/tab/my_select.png',
                        text: '我的',
                  }
                ],
            }
      },
    }</span></pre>
</div>
<p>最后css 样式</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">&lt;style lang="scss"&gt;
    .tab </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      position</span>:<span style="color: rgba(0, 0, 255, 1)"> fixed</span>;<span style="color: rgba(255, 0, 0, 1)">
      display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
      align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
      justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> space-between</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 1024</span>;<span style="color: rgba(255, 0, 0, 1)">
      background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #FFFFFF</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
      left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
      bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
      padding-bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> env(safe-area-inset-bottom)</span>;<span style="color: rgba(255, 0, 0, 1)">
      border-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 1rpx solid #888888</span>;<span style="color: rgba(255, 0, 0, 1)">

      .tab_tiem {
            flex</span>:<span style="color: rgba(0, 0, 255, 1)"> 1</span>;<span style="color: rgba(255, 0, 0, 1)">
            width</span>:<span style="color: rgba(0, 0, 255, 1)"> 25%</span>;<span style="color: rgba(255, 0, 0, 1)">
            display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
            align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
            flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> column</span>;<span style="color: rgba(255, 0, 0, 1)">
            justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
            font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 24rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
            color</span>:<span style="color: rgba(0, 0, 255, 1)"> #666</span>;<span style="color: rgba(255, 0, 0, 1)">
            height</span>:<span style="color: rgba(0, 0, 255, 1)"> 80rpx</span>;
      }<span style="color: rgba(128, 0, 0, 1)">

      .item_img </span>{<span style="color: rgba(255, 0, 0, 1)">
            padding-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 4rpx</span>;
      }<span style="color: rgba(128, 0, 0, 1)">

      .image </span>{<span style="color: rgba(255, 0, 0, 1)">
            height</span>:<span style="color: rgba(0, 0, 255, 1)"> 30rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
            width</span>:<span style="color: rgba(0, 0, 255, 1)"> 30rpx</span>;
      }<span style="color: rgba(128, 0, 0, 1)">

      .tab::before </span>{<span style="color: rgba(255, 0, 0, 1)">
            color</span>:<span style="color: rgba(0, 0, 255, 1)"> red</span>;
      }<span style="color: rgba(128, 0, 0, 1)">

      .item_name </span>{<span style="color: rgba(255, 0, 0, 1)">
            font-weight</span>:<span style="color: rgba(0, 0, 255, 1)"> bold</span>;<span style="color: rgba(255, 0, 0, 1)">
            transform</span>:<span style="color: rgba(0, 0, 255, 1)"> scale(0.8)</span>;<span style="color: rgba(255, 0, 0, 1)">
            transform-origin</span>:<span style="color: rgba(0, 0, 255, 1)"> center 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
            line-height</span>:<span style="color: rgba(0, 0, 255, 1)"> 30rpx</span>;
      }<span style="color: rgba(128, 0, 0, 1)">

      .active </span>{<span style="color: rgba(255, 0, 0, 1)">
            // color</span>:<span style="color: rgba(0, 0, 255, 1)"> var(--color) !important</span>;<span style="color: rgba(255, 0, 0, 1)">
            color</span>:<span style="color: rgba(0, 0, 255, 1)"> red</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
    }
&lt;/style&gt;</span></pre>
</div>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:虚乄,转载请注明原文链接:https://www.cnblogs.com/lovejielive/p/14251327.html</p><br><br>
来源:https://www.cnblogs.com/lovejielive/p/14251327.html
頁: [1]
查看完整版本: uni-app 自定义 简单 底部tab