fix(menu): 分类第一次无法点击
This commit is contained in:
1 parent
140afd88a1
commit
15f3b09f6d
1 file changed
+31
-26
@@ -566,7 +566,10 @@ const getShopList = async(res) => {
|
|||||||
refreshCart();
|
refreshCart();
|
||||||
}
|
}
|
||||||
console.log('goods:',mygoods)
|
console.log('goods:',mygoods)
|
||||||
nextTick(() => measureMenuLayout())
|
nextTick(() => {
|
||||||
|
measureMenuLayout()
|
||||||
|
calcSize()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -689,20 +692,21 @@ const takein = (force = false) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
const handleMenuTap = (id) => { //点击菜单项事件
|
const handleMenuTap = async (id) => { //点击菜单项事件
|
||||||
if (!sizeCalcState.value) {
|
|
||||||
calcSize()
|
|
||||||
}
|
|
||||||
|
|
||||||
menuClickLock.value = true
|
menuClickLock.value = true
|
||||||
if (menuClickLockTimer) clearTimeout(menuClickLockTimer)
|
if (menuClickLockTimer) clearTimeout(menuClickLockTimer)
|
||||||
currentCateId.value = id
|
currentCateId.value = id
|
||||||
menuScrollIntoView.value = `menu-${id}`
|
menuScrollIntoView.value = `menu-${id}`
|
||||||
|
|
||||||
|
// 首次点击时分类高度尚未测完,必须等测量完成再滚动
|
||||||
|
if (!sizeCalcState.value) {
|
||||||
|
await calcSize()
|
||||||
|
}
|
||||||
const targetTop = filteredGoods.value.find(item => item.id == id)?.top || 0
|
const targetTop = filteredGoods.value.find(item => item.id == id)?.top || 0
|
||||||
nextTick(() => {
|
await nextTick()
|
||||||
// 同一 scroll-top 重复赋值不会触发滚动,做微小偏移确保生效
|
// 同一 scroll-top 重复赋值不会触发滚动,做微小偏移确保生效
|
||||||
cateScrollTop.value = cateScrollTop.value === targetTop ? targetTop + 0.01 : targetTop
|
cateScrollTop.value = cateScrollTop.value === targetTop ? targetTop + 0.01 : targetTop
|
||||||
})
|
|
||||||
// scroll-with-animation 期间屏蔽 scroll 回写,动画结束后再放开
|
// scroll-with-animation 期间屏蔽 scroll 回写,动画结束后再放开
|
||||||
menuClickLockTimer = setTimeout(() => {
|
menuClickLockTimer = setTimeout(() => {
|
||||||
menuClickLock.value = false
|
menuClickLock.value = false
|
||||||
@@ -724,29 +728,30 @@ const handleGoodsScroll = ({ detail }) => { //商品列表滚动事件
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const calcSize = () => {
|
const calcSize = () => {
|
||||||
let h = 10
|
return new Promise((resolve) => {
|
||||||
let view = uni.createSelectorQuery().select('#ads')
|
const list = filteredGoods.value
|
||||||
if (view) {
|
if (!list.length) {
|
||||||
view.fields({
|
sizeCalcState.value = true
|
||||||
size: true
|
resolve()
|
||||||
}, data => {
|
return
|
||||||
if (data) {
|
|
||||||
h += Math.floor(data.height)
|
|
||||||
}
|
}
|
||||||
}).exec()
|
const query = uni.createSelectorQuery()
|
||||||
}
|
list.forEach((item) => {
|
||||||
filteredGoods.value.forEach(item => {
|
query.select(`#cate-${item.id}`).boundingClientRect()
|
||||||
let view = uni.createSelectorQuery().select(`#cate-${item.id}`)
|
})
|
||||||
view.fields({
|
query.exec((rects) => {
|
||||||
size: true
|
let h = 0
|
||||||
}, data => {
|
list.forEach((item, index) => {
|
||||||
console.log('h3:',h)
|
const rect = rects?.[index]
|
||||||
|
const height = rect?.height || 0
|
||||||
item.top = h
|
item.top = h
|
||||||
h += data.height
|
h += height
|
||||||
item.bottom = h
|
item.bottom = h
|
||||||
}).exec()
|
|
||||||
})
|
})
|
||||||
sizeCalcState.value = true
|
sizeCalcState.value = true
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
const handleAddToCart = (cate, newGood, num) =>{ //添加到购物车
|
const handleAddToCart = (cate, newGood, num) =>{ //添加到购物车
|
||||||
isCartShow.value = true
|
isCartShow.value = true
|
||||||
|
|||||||
Reference in new issue
Block a user