开始
热门分类封装组件
topic-nav.vue
剪切之前先构造动态的数据
nav:[
{name:"最新"},
{name:"游戏"},
{name:"打卡"},
{name:"情感"},
{name:"故事"},
{name:"喜爱"},
]
改成v-for循环。
<view class="u-f-ajc">
<block v-for="(item,index) in topic.nav" :key="index">
<view class="u-f-ajc">{{item.name}}</view>
</block>
</view>
剪切代码到组件
这里往下的所有css复制进去
<style scoped>
.topic-nav {
border-bottom: 1upx solid #EEEEEE;
border-top: 1upx solid #EEEEEE;
padding: 20upx;
}
.topic-nav>view:first-child {
margin-bottom: 10upx;
}
.topic-nav>view:first-child view {
color: #9E9E9E;
}
.topic-nav>view:first-child>view:first-child {
color: #333333;
font-size: 32upx;
}
.topic-nav>view:last-child>view {
flex: 1;
background: #dddddd;
color: #9E9E9E;
border-radius: 10upx;
margin: 0 10upx;
}
</style>
js代码
<block v-for="(item,index) in nav" :key="index">
<view class="u-f-ajc">{{item.name}}</view>
</block>
<script>
export default {
props: {
nav: Array
}
}
</script>
引入组件
import topicNav from '@/components/news/topic-nav.vue';
topicNav
<!-- 热门分类 -->
<topic-nav :nav="topic.nav"></topic-nav>
测试
本节代码
topic-nav.vue组件
<template>
<view class="topic-nav">
<view class="u-f-ajc u-f-jsb">
<view class="">热门分类</view>
<view class="u-f-ajc">
更多<view class="icon iconfont icon-jinru"></view>
</view>
</view>
<view class="u-f-ajc">
<block v-for="(item,index) in nav" :key="index">
<view class="u-f-ajc">{{item.name}}</view>
</block>
</view>
</view>
</template>
<script>
export default {
props: {
nav: Array
}
}
</script>
<style scoped>
.topic-nav {
border-bottom: 1upx solid #EEEEEE;
border-top: 1upx solid #EEEEEE;
padding: 20upx;
}
.topic-nav>view:first-child {
margin-bottom: 10upx;
}
.topic-nav>view:first-child view {
color: #9E9E9E;
}
.topic-nav>view:first-child>view:first-child {
color: #333333;
font-size: 32upx;
}
.topic-nav>view:last-child>view {
flex: 1;
background: #dddddd;
color: #9E9E9E;
border-radius: 10upx;
margin: 0 10upx;
}
</style>
news.vue页面
<template>
<view>
<news-nav-bar :tabBars="tabBars" :tabIndex="tabIndex" @change-tab="changeTab"></news-nav-bar>
<view>
<swiper class="swiper-box" :style="{height: swiperheight+'px'}" :current="tabIndex" :change="tabChange">
<!-- 关注 -->
<swiper-item>
<scroll-view scroll-y class="list" @scrolltolower="loadmore(index)" @scroll="scroll"
:scroll-top="srcollTopValue" :style="{height: swiperheight+'px'}">
<!-- 列表 -->
<block v-for="(item,index) in guanzhu.list" :ket="index">
<common-list :item="item" :index="index"></common-list>
</block>
<!-- 上拉加载 -->
<load-more :loadtext="guanzhu.loadtext"></load-more>
</scroll-view>
</swiper-item>
<!-- 话题 -->
<swiper-item>
<scroll-view scroll-y class="list">
<!-- 搜索框 -->
<view class="search-input">
<input class="uni-input" placeholder-class="icon iconfont icon-sousuo topic-search"
placeholder="搜索内容" />
</view>
<!-- 轮播图 -->
<swiper class="topic-swiper" :indicator-dots="true" :autoplay="true" :interval="3000"
:duration="1000">
<block v-for="(item,index) in topic.swiper" :key="index">
<swiper-item>
<image :src="item.src" mode="widthFix" lazy-load="true"></image>
</swiper-item>
</block>
</swiper>
<!-- 热门分类 -->
<topic-nav :nav="topic.nav"></topic-nav>
<!-- 最近更新 -->
</scroll-view>
</swiper-item>
</swiper>
</view>
</view>
</template>
<script>
import commonList from '@/components/common/common-list.vue';
import newsNavBar from '@/components/news/news-nav-bar.vue';
import loadMore from '@/components/common/load-more.vue';
import topicNav from '@/components/news/topic-nav.vue';
export default {
components: {
commonList,
newsNavBar,
loadMore,
topicNav
},
data() {
return {
swiperheight: 500,
srcollTopValue: 0, // 默认是0
tabIndex: 1,
tabBars: [{
name: '关注',
id: 'guanzhu'
},
{
name: '话题',
id: 'toppic'
},
],
guanzhu: {
loadtext: "上拉加载更多",
list: [
// 文字
{
userpic: "../../static/demo/userpic/12.jpg",
username: "哈哈",
sex: 0, //0 男 1 女
age: 25,
isguanzhu: false,
title: "我是标题",
titlepic: "",
video: false,
share: false,
path: "深圳 龙岗",
sharenum: 20,
commentnum: 30,
goodnum: 20
},
// 图文
{
userpic: "../../static/demo/userpic/12.jpg",
username: "哈哈",
sex: 0, //0 男 1 女
age: 25,
isguanzhu: false,
title: "我是标题",
titlepic: "../../static/demo/datapic/13.jpg",
video: false,
share: false,
path: "深圳 龙岗",
sharenum: 20,
commentnum: 30,
goodnum: 20
},
// 视频
{
userpic: "../../static/demo/userpic/12.jpg",
username: "哈哈",
sex: 0, //0 男 1 女
age: 25,
isguanzhu: false,
title: "我是标题",
titlepic: "../../static/demo/datapic/13.jpg",
video: {
looknum: "20w",
long: "2:47"
},
share: false,
path: "深圳 龙岗",
sharenum: 20,
commentnum: 30,
goodnum: 20
},
// 分享
{
userpic: "../../static/demo/userpic/12.jpg",
username: "哈哈",
sex: 0, //0 男 1 女
age: 25,
isguanzhu: false,
title: "我是标题",
titlepic: "",
video: false,
share: {
title: "我是分享的标题",
titlepic: "../../static/demo/datapic/14.jpg"
},
path: "深圳 龙岗",
sharenum: 20,
commentnum: 30,
goodnum: 20
},
]
},
topic: {
swiper: [{
src: "../../static/demo/banner1.jpg"
},
{
src: "../../static/demo/banner2.jpg"
},
{
src: "../../static/demo/banner3.jpg"
},
],
nav: [{
name: "最新"
},
{
name: "游戏"
},
{
name: "打卡"
},
{
name: "情感"
},
{
name: "故事"
},
{
name: "喜爱"
},
]
}
}
},
onLoad() {
uni.getSystemInfo({
success: (res) => {
console.log('当前window高度和窗口高度');
console.log(res.windowHeight);
console.log(res.screenHeight);
let height = res.windowHeight - uni.upx2px(100)
this.swiperheight = height;
}
});
},
methods: {
scroll(e) {
// console.log('scroll事件',e);
this.scrollTopValue = e.detail.scrollTop;
},
// 点击切换
changeTab(index) {
console.log('父页面点击:', index);
this.tabIndex = index;
},
// 滑动事件
tabChange(e) {
this.tabIndex = e.details.current
},
// 上拉加载
loadmore() {
if (this.guanzhu.loadtext != "上拉加载更多") {
return;
}
// 修改状态
this.guanzhu.loadtext = "加载中...";
// 获取数据
setTimeout(() => {
//获取完成
let obj = {
userpic: "../../static/demo/userpic/12.jpg",
username: "哈哈",
sex: 0, //0 男 1 女
age: 25,
isguanzhu: false,
title: "我是标题",
titlepic: "../../static/demo/datapic/13.jpg",
video: false,
share: false,
path: "深圳 龙岗",
sharenum: 20,
commentnum: 30,
goodnum: 20
};
this.guanzhu.list.push(obj);
this.guanzhu.loadtext = "上拉加载更多";
}, 1000);
// this.guanzhu.loadtext="没有更多数据了";
}
}
}
</script>
<style>
.search-input {
/* border: 1upx solid; */
padding: 20upx;
}
.search-input>input {
/* border: 1upx solid; */
background: #F4F4F4;
border-radius: 10upx;
}
.topic-search {
display: flex;
justify-content: center;
font-size: 27upx;
}
.topic-swiper {
padding: 0 20upx 20upx 20upx;
}
.topic-swiper image {
width: 100%;
border-radius: 10upx;
}
</style>