祖安之光
4 天以前 0c5fd22a20dae1c6a54384185cdca4e0b93360f2
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
import { Directive, DirectiveBinding } from 'vue'
 
const loadMoreNew: Directive = {
    beforeMount(el: any, binding: DirectiveBinding) {
        let arg = binding.arg as any
        if (!arg) return
        const selectDom = document.querySelector(`.${arg.name} .el-select-dropdown .el-select-dropdown__wrap`)
        function loadMores(this: any) {
            const isBase = this.scrollHeight - this.scrollTop <= this.clientHeight
            if (isBase) {
                binding.value && binding.value(arg)
            }
        }
        el.selectDomInfo = selectDom
        el.userLoadMore = loadMores
        selectDom?.addEventListener('scroll', loadMores)
    },
    beforeUnmount(el: any) {
        if (el.userLoadMore) {
            el.selectDomInfo.removeEventListener('scroll', el.userLoadMore)
            delete el.selectDomInfo
            delete el.userLoadMore
        }
    }
}
export default loadMoreNew