uniapp 导航栏 手写组件

<template>
    <view class="nav-bar">
        <scroll-view scroll-x="true" class="scroll-view" show-scrollbar="false">
            <view class="nav-item" v-for="(item, index) in navItems" :key="index" @tap="selectItem(index)">
                <text :class="['nav-text', { active: currentIndex === index }]"
                    :style="{ fontSize: fontSize + 'rpx' }">{{ item }}</text>
                <view :class="['indicator', { active: currentIndex === index }]" :style="{
                     width: currentIndex === index ? indicatorWidth + 'rpx' : '0',height: dynamicHeight + 'rpx'}"></view>
            </view>
        </scroll-view>
    </view>
</template>

<script>
export default {
    name: 'NavBar',
    props: {
        dynamicHeight: {  //active下滑高度
            type: [Number, String],
            default: 6
        },
        indicatorWidth: {  //active下滑宽度
            type: [Number, String],
            default: 40
        },
        fontSize: { //字体大小
            type: [Number, String],
            default: '28'
        },
        navItems: {
            type: Array,
            default: () => ['首页',]
        },
        defaultIndex: {
            type: Number,
            default: 0
        }
    },
    data() {
        return {
            currentIndex: this.defaultIndex
        }
    },
    methods: {
        selectItem(index) {
            this.currentIndex = index
            this.$emit('item-selected', index)
        }
    }
}
</script>

<style scoped>
.nav-bar {
    background-color: #ffffff;
    padding: 10rpx 0;
    border-bottom: 1rpx solid #f0f0f0;
}

.scroll-view {
    white-space: nowrap;
}

.nav-item {
    display: inline-block;
    padding: 0 20rpx;
    position: relative;
    text-align: center;
}

.nav-text {
    color: #333333;
    font-weight: bold;
    line-height: 60rpx;
}

.active {
    color: #27ae60;
    font-weight: bold;
}

.indicator {
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 0;
    
    background-color: #27ae60;
    transition: width 0.3s;
}


</style>

使用组件

<template>
  <view>
      <NavBar :navItems="myNavItems" :fontSize="26" :dynamicHeight="4" :indicatorWidth="30" @item-selected="onItemSelected" />
      <!-- 其他页面内容 -->
  </view>
</template>

<script>
import NavBar from './xztdemoNavBar.vue'

export default {
  components: {
      NavBar
  },
  data() {
      return {
          myNavItems: ['首页', '北京同仁堂', '正官庄', '仙芝楼', '江中', 'swisses', '品牌馆'],
          // myNavItems: ['首页', '分类', '购物车', '我的']
      }
  },
  methods: {
      onItemSelected(index) {
          console.log('Selected item index:', index)
          // 处理选中项的逻辑
      }
  }
}
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Uni-app是一款跨平台的开发框架,可以将一个应用程序同时运行在多个平台上。导航栏是应用程序中最重要的组件之一,需要经常更新和变化。因此,uniapp导航栏插槽父组件是一种非常常见的设计模式,主要用于在导航栏中添加额外的内容,比如搜索栏、扫描图标等。 Uniapp导航栏插槽父组件的作用是,将其他组件插入到导航栏中间的位置,实现扩展和定制化功能。通常,我们会使用V-for来实现插槽父组件,将导航栏的布局分为左、中、右三个部分,通过插槽的方式添加组件。 插槽父组件可以提供灵活的定制化工具,比如可以在导航栏中添加自定义标签页,通过自定义标签页进行切换,来增加用户的交互性和便捷性。通过插槽父组件,我们还可以添加自定义按钮,比如搜索按钮、分享按钮、购物车按钮等,从而带来更加个性化和丰富的用户体验。 总之,Uniapp导航栏插槽父组件是一种非常常见和实用的设计模式,在应用程序开发过程中,可以让开发者更加灵活和方便地实现导航栏的扩展和定制化。 ### 回答2: Uniapp是一款跨平台开发框架,让我们可以在一套代码中实现多端发布的目的。在Uniapp中,我们可以使用导航栏插槽父组件来自定义导航栏的样式和布局。 首先,我们需要明确导航栏插槽父组件的作用。它可以作为导航栏插槽的容器,用于存放自定义的导航栏组件或者自定义样式。通过导航栏插槽父组件,我们可以灵活的定制导航栏,增强应用的美观程度和用户体验。 在Uniapp中,导航栏插槽父组件的使用方法也非常简单,只需要在页面中使用<uni-nav-bar slot="nav-bar"> </uni-nav-bar>即可。其中,slot="nav-bar"是指定了此组件导航栏插槽父组件,并且在使用时需要在组件外层套上一个<view>标签。 在导航栏插槽父组件中,我们可以使用插槽(slot)来添加自定义组件或者自定义样式,从而实现灵活的定制。同时,为了兼容多个平台,我们还可以根据平台不同来实现不同的导航栏样式。 总之,uniapp导航栏插槽父组件可以让我们很方便的实现导航栏自定义,增强了应用的美观程度和用户体验。我们可以通过插槽来添加自定义组件或者自定义样式,从而满足不同平台上的需求。希望以上内容能帮助你了解uniapp导航栏插槽父组件的原理与用法。 ### 回答3: Uniapp是一款基于Vue.js框架的跨平台应用开发工具,通过Uniapp,开发者可以一次编写代码,实现多端运行,包括iOS、Android、H5、小程序以及快应用等多种平台。其中,导航栏插槽父组件Uniapp中常用的一种组件之一。 在Uniapp中,导航栏作为应用的一个重要组成部分,用于实现页面之间的跳转,同时也是应用的一种主题风格设计。而导航栏插槽父组件则是Uniapp中用于自定义导航栏样式的组件之一,它可以在导航栏中添加自定义的HTML元素,如按钮、图标等。 导航栏插槽父组件的使用非常简单,只需在页面组件中引入并配置即可。将导航栏插槽父组件引入后,开发者即可自定义导航栏的样式和内容。在组件中,开发者可以使用插槽来添加导航栏的自定义元素,插槽中的所有元素都会被添加到导航栏中,从而实现导航栏的自定义样式。 需要注意的是,Uniapp导航栏插槽父组件的使用需要具备一定的前端知识,了解HTML、CSS等前端基础知识。同时,在使用导航栏插槽父组件时,也需要充分考虑不同平台的兼容性问题,从而确保应用在各个平台下的显示效果一致、稳定。 总之,Uniapp导航栏插槽父组件是一个非常实用的组件,在开发过程中能够为开发者提供很好的自定义导航栏样式的能力,同时也能够为用户提供更好的应用体验。同时,需要注意的是,在使用时需要遵循一定的开发规范,从而确保应用的稳定性和兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值