Newer
Older
smartwell_front / src / directives / table-scroll / index.ts
liyaguang on 27 Apr 2 KB 视频轮询逻辑修改

import _ from 'lodash'
interface ElType extends HTMLElement {
  timer: number | null
  isScroll: boolean
  curTableTopValue: number
}
export default {
  created(el: ElType) {
    el.timer = null
    el.isScroll = true
    el.curTableTopValue = 0
  },
  mounted(el: ElType, binding: { value?: { delay?: number } }) {
    const { delay = 15 } = binding.value || {}
    const tableDom = el.getElementsByClassName('el-scrollbar__wrap')[0] as HTMLElement
    const viewDom = el.getElementsByClassName('el-scrollbar__view')[0] as HTMLElement
    const onMouseOver = () => (el.isScroll = false)
    const onMouseOut = () => {
      el.curTableTopValue = tableDom.scrollTop
      el.isScroll = true
    }
    // table-container
    const container =  document.getElementsByClassName('table-container')[0] as HTMLElement || document.getElementsByClassName('list-container')[0] as HTMLElement
    // console.log(container, 'container')
    container?.addEventListener('mouseover', onMouseOver)
    container?.addEventListener('mouseout', onMouseOut)

    el.timer = window.setInterval(() => {
      const viewDomClientHeight = viewDom.scrollHeight
      const tableDomClientHeight = el.clientHeight

      if (el.isScroll && viewDomClientHeight > tableDomClientHeight) {
        const curScrollPosition = tableDom.clientHeight + el.curTableTopValue
        el.curTableTopValue =
          curScrollPosition === tableDom.scrollHeight
            ? 0
            : el.curTableTopValue + 1
        tableDom.scrollTop = el.curTableTopValue
      }
    }, delay)

    // 监测是否快要滚动到底部
    let flag = true
    const selectWrap = el.getElementsByClassName('el-scrollbar__wrap')[0] as HTMLElement
    selectWrap?.addEventListener('scroll', function () {
      let sign = 50
      const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight
      if (scrollDistance < sign) {
        if(!el.isScroll) { return }
        const { loadmore = () => { console.log('执行加在到底函数111')} } = binding.value || {}
        if(flag) {
          flag = false
          loadmore()
          // console.log('执行加在到底函数')
          setTimeout(() => {
            flag = true
          }, 1000);
        }
      }
    })
  },
  unmounted(el: ElType) {
    if (el.timer !== null) {
      clearInterval(el.timer)
    }
    el.timer = null

    const tableDom = el.getElementsByClassName('el-scrollbar__wrap')[0] as HTMLElement
    const container =  document.getElementsByClassName('table-container')[0] as HTMLElement || document.getElementsByClassName('list-container')[0] as HTMLElement
    container?.removeEventListener('mouseover', () => (el.isScroll = false))
    container?.removeEventListener('mouseout', () => {
      el.curTableTopValue = tableDom.scrollTop
      el.isScroll = true
    })
  },
}