-
Notifications
You must be signed in to change notification settings - Fork 362
/
Copy pathhome.js
120 lines (106 loc) · 2.88 KB
/
home.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// pages/home/home.js
import {
getMultiData,
getGoodsData
} from '../../service/home.js'
const TOP_DISTANCE = 1000;
const types = ['pop', 'new', 'sell']
Page({
data: {
banners: [],
recommends: [],
titles: ['流行', '新款', '精选'],
goods: {
pop: {page: 0, list: []},
new: {page: 0, list: []},
sell: {page: 0, list: []}
},
currentType: 'pop',
showBackTop: false,
isTabFixed: false,
tabScrollTop: 0
},
onLoad: function (options) {
// 1.请求轮播图以及推荐数据
this._getMultidata()
// 2.请求商品数据
this._getGoodsData('pop')
this._getGoodsData('new')
this._getGoodsData('sell')
},
// onShow: 页面显示出来的时回调的函数
// 页面显示是否意味着所有的图片都加载完成
onShow() {
},
// ------------------- 网络请求函数 -------------------------
_getMultidata() {
getMultiData().then(res => {
// 取出轮播图和推荐的数据
const banners = res.data.data.banner.list;
const recommends = res.data.data.recommend.list;
// 将banners和recommends放到data中
this.setData({
banners,
recommends
})
})
},
_getGoodsData(type) {
// 1.获取页码
const page = this.data.goods[type].page + 1;
// 2.发送网络请求
getGoodsData(type, page).then(res => {
// console.log(res)
// 2.1.取出数据
const list = res.data.data.list;
// 2.2.将数据设置到对应type的list中
const oldList = this.data.goods[type].list;
oldList.push(...list)
// 2.3.将数据设置到data中的goods中
const typeKey = `goods.${type}.list`;
const pageKey = `goods.${type}.page`;
this.setData({
[typeKey]: oldList,
[pageKey]: page
})
})
},
// ------------------- 事件监听函数 -------------------------
handleTabClick(event) {
// 取出index
const index = event.detail.index;
// 设置currentType
this.setData({
currentType: types[index]
})
},
handleImageLoad() {
wx.createSelectorQuery().select('#tab-control').boundingClientRect(rect => {
this.data.tabScrollTop = rect.top
}).exec()
},
onReachBottom() {
// 上拉加载更多 -> 请求新的数据
this._getGoodsData(this.data.currentType)
},
onPageScroll(options) {
// 1.取出scrollTop
const scrollTop = options.scrollTop;
// console.log(scrollTop)
// 2.修改showBackTop属性
// 官方: 不要再滚动的函数回调中频繁的调用this.setData
const flag1 = scrollTop >= TOP_DISTANCE;
if (flag1 != this.data.showBackTop) {
this.setData({
showBackTop: flag1
})
}
// 3.修改isTabFixed属性
const flag2 = scrollTop >= this.data.tabScrollTop;
if (flag2 != this.data.isTabFixed) {
this.setData({
isTabFixed: flag2
})
}
}
})