refactor: ♻️ 重构SelectPicker滚动到选中值的逻辑

This commit is contained in:
Moonofweisheng 2024-10-25 13:36:14 +08:00
parent 4246548552
commit fbd1d8b36a

View File

@ -261,7 +261,7 @@ const { proxy } = getCurrentInstance() as any
function setScrollIntoView() { function setScrollIntoView() {
let wraperSelector: string = '' let wraperSelector: string = ''
let selectorPromise: Promise<UniApp.NodeInfo | UniApp.NodeInfo[]>[] = [] let selectorPromise: Promise<UniApp.NodeInfo>[] = []
if (isDef(selectList.value) && selectList.value !== '' && !isArray(selectList.value)) { if (isDef(selectList.value) && selectList.value !== '' && !isArray(selectList.value)) {
wraperSelector = '#wd-radio-group' wraperSelector = '#wd-radio-group'
selectorPromise = [getRect(`#radio${selectList.value}`, false, proxy)] selectorPromise = [getRect(`#radio${selectList.value}`, false, proxy)]
@ -274,28 +274,24 @@ function setScrollIntoView() {
if (wraperSelector) { if (wraperSelector) {
requestAnimationFrame().then(() => { requestAnimationFrame().then(() => {
requestAnimationFrame().then(() => { requestAnimationFrame().then(() => {
Promise.all([getRect('.wd-select-picker__wrapper', false, proxy), getRect(wraperSelector, false, proxy), ...selectorPromise]) Promise.all([getRect('.wd-select-picker__wrapper', false, proxy), getRect(wraperSelector, false, proxy), ...selectorPromise]).then((res) => {
.then((res: any[]) => {
if (isDef(res) && isArray(res)) { if (isDef(res) && isArray(res)) {
const scrollView = res[0] const scrollView = res[0]
const wraper = res[1] const wraper = res[1]
const target = res.slice(2) || [] const target = res.slice(2) || []
if (isDef(wraper) && isDef(scrollView)) { if (isDef(wraper) && isDef(scrollView)) {
const index = target.findIndex((item) => { const index = target.findIndex((item) => {
return item.top >= scrollView.top && item.bottom <= scrollView.bottom return item.bottom! > scrollView.top! && item.top! < scrollView.bottom!
}) })
if (index < 0) { if (index < 0) {
scrollTop.value = -1 scrollTop.value = -1
nextTick(() => { nextTick(() => {
scrollTop.value = Math.max(0, target[0].top - wraper.top - scrollView.height / 2) scrollTop.value = Math.max(0, target[0].top! - wraper.top! - scrollView.height! / 2)
}) })
} }
} }
} }
}) })
.catch((error) => {
console.log(error)
})
}) })
}) })
} }