EP16 自定义头部导航栏
文件路径: E:/homework/uniappv3tswallpaper/pages/index/index.vue
在 index 文件中添加 custom-nav-bar 组件。
<template>
<view class="homeLayout pageBg">
<custom-nav-bar></custom-nav-bar>
<view class="banner">
<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" circular="true"
indicator-color="rgba(255,255,255,0.5)" indicator-active-color="rgba(255,255,255,1)">
<swiper-item v-for="item in 3">
<image src="../../common/images/banner1.jpg" mode="scaleToFill"></image>
</swiper-item>
</swiper>
</view>
<view class="notice">
<view class="left">
<uni-icons type="sound-filled" size="20"></uni-icons>
<text class="text">公告</text>
</view>
<view class="center">
<swiper :autoplay="true" :interval="3000" :duration="1000" circular vertical>
<swiper-item v-for="item in 4">
文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容文字内容
</swiper-item>
</swiper>
</view>
<view class="right">
<uni-icons type="forward" size="16" color="#333"></uni-icons>
</view>
</view>
<view class="select">
<common-title>
<template #name>
每日推荐
</template>
<template #custom>
<view class="date">
<uni-icons type="calendar"></uni-icons>
<view class="text">
<uni-dateformat :date="Date.now()" format="dd号" />
</view>
</view>
</template>
</common-title>
<view class="content">
<scroll-view scroll-x="true">
<view class="box" v-for="item in 8">
<image src="../../common/images/classify1.jpg" mode="aspectFill"></image>
</view>
</scroll-view>
</view>
</view>
<view class="theme">
<common-title>
<template #name>
专题精选
</template>
<template #custom>
<navigator url="">More+</navigator>
</template>
</common-title>
<view class="content">
<theme-item v-for="item in 8"></theme-item>
<theme-item :isMore="true"></theme-item>
</view>
</view>
</view>
</template>
<script setup>
</script>
<style lang="scss">
.homeLayout {
.banner {
width: 750rpx;
padding: 30rpx 0;
swiper {
width: 100%;
height: 340rpx;
&-item {
width: 100%;
height: 100%;
padding: 0 30rpx;
image {
width: 100%;
height: 100%;
border-radius: 10rpx;
}
}
}
}
.notice {
margin: 0 30rpx;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
align-items: center;
background: gray;
border-radius: 80rpx;
height: 80rpx;
line-height: 80rpx;
.left {
width: 140rpx;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
align-items: center;
:deep() {
.uni-icons {
color: $brand-theme-color !important;
}
}
.text {
color: $brand-theme-color;
font-weight: 600;
font-size: 28rpx;
}
}
.center {
flex: 1;
height: 100%;
swiper {
height: 100%;
&-item {
// 以下三条是实现 文字长度超过显示宽度时展示省略号 的关键操作
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
// 以上三条
height: 100%;
color: $text-font-color-3;
font-size: 30rpx;
// flex布局与 text-overflow: ellipsis;属性 冲突
// display: flex;
// flex-direction: row;
// flex-wrap: nowrap;
// align-content: center;
// align-items: center;
// justify-content: flex-start;
align-content: end;
align-items: end;
}
}
}
.right {
width: 70rpx;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
align-items: center;
justify-content: center;
}
}
.select {
padding: 50rpx 30rpx 0 30rpx;
scroll-view {
white-space: nowrap;
.box {
display: inline-block;
width: 200rpx;
height: 430rpx;
margin-right: 15rpx;
image {
height: 100%;
width: 100%;
}
}
:last-child {
margin-right: 0;
border-radius: 10rpx;
}
}
.date {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
align-items: center;
color: $brand-theme-color;
:deep() {
.uni-icons {
color: $brand-theme-color !important;
}
}
}
}
.theme {
padding: 50rpx 30rpx;
.content {
display: grid;
gap: 15rpx;
grid-template-columns: repeat(3, 1fr);
}
}
}
</style>
文件路径: E:/homework/uniappv3tswallpaper/components/custom-nav-bar/custom-nav-bar.vue
custom-nav-bar 组件内容
<template>
<view class="layout">
<view class="navbar">
<view class="statusBar"> </view>
<view class="titleBar">
<view class="title">
标题
</view>
<view class="search">
<uni-icons type="search" color="#888" size="18"></uni-icons>
<text>搜索</text>
</view>
</view>
</view>
<view class="fill">
</view>
</view>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.layout {
.navbar {
position: fixed;
left: 0%;
top: 0%;
width: 100%;
z-index: 10;
background:
linear-gradient(to bottom, rgba(0, 0, 0, 0.2), white 400rpx),
linear-gradient(to right, #A6E3D7 30%, #FFE1F2);
.statusBar {}
.titleBar {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: flex-start;
align-items: center;
.title {
font-weight: 700;
font-size: 44rpx;
color: $text-font-color-1;
}
.search {
width: 220rpx;
height: 50rpx;
border-radius: 60rpx;
background: rgba(255, 255, 255, 0.4);
margin-left: 30rpx;
color: #999;
font-size: 28rpx;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: flex-start;
align-items: center;
text {
padding-left: 10rpx;
}
}
}
}
}
</style>