109 lines
3.7 KiB
Plaintext
109 lines
3.7 KiB
Plaintext
![]() |
const status = {}
|
||
|
|
||
|
function handleCalendarChange (newVal, oldVal, ownerComponent, instance) {
|
||
|
const dataset = instance.getDataset()
|
||
|
const { id } = dataset
|
||
|
|
||
|
const baselineComp = ownerComponent.selectComponent('.ant-calendar-days')
|
||
|
const basePos = baselineComp.getBoundingClientRect()
|
||
|
const subtitleComps = ownerComponent.selectAllComponents('.ant-calendar-subtitle')
|
||
|
const scroller = ownerComponent.selectComponent('.ant-subcalendar')
|
||
|
const scrollTop = scroller.getDOMProperty(['scrollTop']).scrollTop
|
||
|
|
||
|
const stickyRange = subtitleComps.map((comp, i) => {
|
||
|
const pos = comp.getBoundingClientRect()
|
||
|
const pos1 = subtitleComps[i + 1] && subtitleComps[i + 1].getBoundingClientRect()
|
||
|
|
||
|
return {
|
||
|
stickyStart: pos.top + scrollTop - basePos.bottom,
|
||
|
stickyEnd: pos1 && (pos1.top + scrollTop - basePos.bottom)
|
||
|
}
|
||
|
})
|
||
|
ownerComponent.callMethod('console', stickyRange)
|
||
|
status[id] = {
|
||
|
range: stickyRange
|
||
|
}
|
||
|
|
||
|
if (scrollTop == 0) {
|
||
|
subtitleComps[0].addClass('ant-calendar-title-fixed')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function handleCheckScroll (newVal, oldVal, ownerComponent, instance) {
|
||
|
const dataset = instance.getDataset()
|
||
|
const { id } = dataset
|
||
|
const scroller = ownerComponent.selectComponent('.ant-subcalendar')
|
||
|
const scrollTop = scroller.getDOMProperty(['scrollTop']).scrollTop
|
||
|
|
||
|
const lastScrollTop = status[id] && status[id].lastScrollTop
|
||
|
ownerComponent.callMethod('console', lastScrollTop, scrollTop)
|
||
|
status[id] = status[id] || {}
|
||
|
status[id].lastScrollTop = scrollTop
|
||
|
if (lastScrollTop !== scrollTop) {
|
||
|
handleMove({ instance }, ownerComponent)
|
||
|
} else {
|
||
|
ownerComponent.callMethod('clearCheckScroll')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function handleMove (event, ownerComponent) {
|
||
|
ownerComponent.callMethod('clearCheckScroll')
|
||
|
|
||
|
const { touches, instance } = event;
|
||
|
const dataset = instance.getDataset()
|
||
|
const { id } = dataset
|
||
|
|
||
|
const subtitleComps = ownerComponent.selectAllComponents('.ant-calendar-subtitle')
|
||
|
const scroller = ownerComponent.selectComponent('.ant-subcalendar')
|
||
|
const scrollTop = scroller.getDOMProperty(['scrollTop']).scrollTop
|
||
|
const stickyRange = status[id] && status[id].range
|
||
|
|
||
|
if (!stickyRange || stickyRange.length != subtitleComps.length) return
|
||
|
|
||
|
ownerComponent.callMethod('console', stickyRange)
|
||
|
ownerComponent.callMethod('console', scrollTop)
|
||
|
if (stickyRange) {
|
||
|
let index = null
|
||
|
stickyRange.some((item, i) => {
|
||
|
if (item.stickyStart < scrollTop && (item.stickyEnd || Infinity) > scrollTop) {
|
||
|
index = i
|
||
|
return true
|
||
|
}
|
||
|
})
|
||
|
ownerComponent.callMethod('console', index)
|
||
|
if (index != null) {
|
||
|
subtitleComps.forEach((item, i) => {
|
||
|
if (i === index) {
|
||
|
item.addClass('ant-calendar-title-fixed')
|
||
|
} else {
|
||
|
item.removeClass('ant-calendar-title-fixed')
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function handleTouchStart (event, ownerComponent) {
|
||
|
ownerComponent.callMethod('console', 'scroll start')
|
||
|
ownerComponent.callMethod('clearCheckScroll')
|
||
|
handleMove(event, ownerComponent)
|
||
|
}
|
||
|
|
||
|
function handleTouchMove (event, ownerComponent) {
|
||
|
ownerComponent.callMethod('console', 'scroll move')
|
||
|
handleMove(event, ownerComponent)
|
||
|
}
|
||
|
|
||
|
function handleTouchEnd (event, ownerComponent) {
|
||
|
ownerComponent.callMethod('console', 'scroll end')
|
||
|
handleMove(event, ownerComponent)
|
||
|
ownerComponent.callMethod('checkScroll')
|
||
|
}
|
||
|
|
||
|
export default {
|
||
|
handleTouchMove,
|
||
|
handleCalendarChange,
|
||
|
handleTouchEnd,
|
||
|
handleTouchStart,
|
||
|
handleCheckScroll
|
||
|
}
|