lin
2026-04-28 e8b60bc428d93f99f66474f3ef418558facf0a31
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
// 引入bindingx,此库类似于微信小程序wxs,目的是让js运行在视图层,减少视图层和逻辑层的通信折损
const BindingX = uni.requireNativePlugin('bindingx')
export default {
    methods: {
        // 此处不写注释,请自行体会
        nvueScrollHandler(e) {
            if (this.indicator) {
                const anchor = this.$refs['uv-scroll-list__scroll-view'].ref
                const element = this.$refs['uv-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 = this.$uv.os() === 'ios' ? 2 : 1
                const expression = `(x / ${actionNum}) / ${contentSize - scrollWidth} * ${this.$uv.getPx(this.$uv.addUnit(barAllMoveWidth))}`
                BindingX.bind({
                    anchor,
                    eventType: 'scroll',
                    props: [{
                        element,
                        property: 'transform.translateX',
                        expression
                    }]
                })
            }
        }
    }
}