123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- var util = require('../../utils/util.js');
- var api = require('../../config/api.js');
- Page({
- data: {
- navList: [],
- categoryList: [],
- currentCategory: {},
- categorys: [],
- scrollLeft: 0,
- scrollTop: 0,
- goodsCount: 0,
- scrollHeight: 0,
- top: 0,
- navtop: 0
- },
- onLoad: function (options) {
- this.setData({
- imgServer: util.imgServer,
- })
- getApp().checkNetStatu();
- this.getCatalog();
- },
- onPullDownRefresh() {
- this.getCatalog();
- getApp().onPullDownRefresh()
- },
- gotoSearch() {
- wx.navigateTo({
- url: '/pages/search/search',
- })
- },
- getCatalog: function () {
- //CatalogList
- let that = this;
- wx.showLoading({
- title: '加载中...',
- });
- util.request(api.CatalogList).then(async function (res) {
- let navList = res.data.categoryList
- let ccs = []
- await Promise.all(navList.map((nav, i) => {
- return util.request(api.CatalogCurrent, { id: nav.id })
- .then(function (res) {
- ccs[i] = res.data.currentCategory
- })
- }))
-
- that.setData({
- navList,
- currentCategory: ccs[0],
- categorys: ccs
- });
- wx.nextTick(() => {
- that.getCatesTop()
- wx.createSelectorQuery().select('#cate-layout').boundingClientRect().exec((rect) => {
- that.catgHeight = rect[0].height
- })
- })
- wx.hideLoading();
- });
- // util.request(api.GoodsCount).then(function (res) {
- // that.setData({
- // goodsCount: res.data.goodsCount
- // });
- // });
- },
- onReady: function () {
- // 页面渲染完成
- },
- onShow: function () {
- // 页面显示
- if (typeof this.getTabBar === 'function' && this.getTabBar()) {
- this.getTabBar().setData({
- selected: 1
- })
- }
-
- getApp().updateCardCount()
- },
- onHide: function () {
- // 页面隐藏
- },
- onUnload: function () {
- // 页面关闭
- },
- async getCatesTop(eid) {
- const index = eid ? this.data.categorys.findIndex(({id}) => id === eid) : this.data.categorys.length
- if (this.heights) {
- return [...this.heights].splice(0, index)
- }
- const firstCategorys = [...this.data.categorys].splice(0, index)
- const heights = []
- await Promise.all(
- firstCategorys.map(({id}) =>
- new Promise(r =>
- wx.createSelectorQuery().select('#index-nav-' + id).boundingClientRect().exec((rect) => {
- heights.push(rect[0].height)
- r()
- })
- )
- )
- )
- this.heights = heights
- return heights
- },
- async scroll(ev) {
- let heights = await this.getCatesTop()
- let mtop = 0
- let tages = heights.map((hei) => {
- let sstart = ev.detail.scrollTop
- let eend = sstart + this.catgHeight
- let start = mtop
- let end = mtop + hei
- let s = start > sstart ? start : sstart
- let e = end > eend ? eend : end
- mtop += hei
- if (s > e) {
- return 0
- } else {
- return (e - s) / hei
- }
- })
- let index = tages.indexOf([...tages].sort((b, a) => a - b)[0])
- this.setData({
- currentCategory: this.data.categorys[index],
- navtop: index * 100 + 'rpx'
- })
- },
- switchCate: async function (event) {
- const eid = event.currentTarget.dataset.id
- const top = (await this.getCatesTop(eid)).reduce((t, c) => t + c, 0)
- this.setData({
- currentCategory: this.data.categorys.find(({id}) => id === eid),
- top: top
- })
- }
- })
|