zhangwei
2025-03-07 d3e6dd6b3032c119676efa1e9fcee3a8a8043fc5
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
27
28
29
30
31
// 引入bindingx,此库类似于微信小程序wxs,目的是让js运行在视图层,减少视图层和逻辑层的通信折损
const BindingX = uni.requireNativePlugin('bindingx')
import { os } from '../../libs/function/index';
export default {
    methods: {
        // 此处不写注释,请自行体会
        nvueScrollHandler(e) {
            const anchor = this.$refs['u-scroll-list__scroll-view'].ref
            let element = {}
            if (this.$refs['u-scroll-list__indicator__line__bar']) {
                element = this.$refs['u-scroll-list__indicator__line__bar'].ref
            }
            const scrollLeft = e.contentOffset.x
            const contentSize = e.contentSize.width
            const { scrollWidth } = this
            const barAllMoveWidth = this.indicatorWidth - this.indicatorBarWidth
            // 在安卓和iOS上,需要除的倍数不一样,iOS需要除以2
            const actionNum = os() === 'ios' ? 2 : 1
            const expression = `(x / ${actionNum}) / ${contentSize - scrollWidth} * ${barAllMoveWidth}`
            BindingX.bind({
                anchor,
                eventType: 'scroll',
                props: [{
                    element,
                    property: 'transform.translateX',
                    expression
                }]
            })
        }
    }
}