APICloud 弹动与滚轴冲突的解决模拟

文章描述了一种在使用APICloud开发应用时遇到的页面下拉刷新与scroll-view滚动冲突的解决方案。作者通过创建两层结构,底层处理弹动事件,上层处理滚轴事件,并通过sendEvent进行通信。然而,这导致上层页面不跟随手指移动,作者通过添加动画模拟页面移动,但效果不理想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        当打开页面的bounces开关来实现下拉刷新和上翻加载是,如果页面中有scroll-view,那么手指上下滑动时弹动会触发,而滚轴无法正常实现,只有按住不动再拖动滚轴才会触发。开始想通过获取手指点击屏幕的坐标点设置触发条件来解决两者的冲突,但是貌似APICloud无法实现,目前我的方案是做成了两层,底层触发弹动,上层放置scroll-view。在底层的scrolltobottom事件中通过sendEvent向上层传递参数,上层页面监听来加载上翻的事件。

        以上方法可以解决弹动与滚轴冲突的问题,但是实际操作时会出现手指上下滑动时上层页面不跟着操作上下移动,这个问题我没有找到方法解决。所有我自己加了页面的移动动画(api.animation)来模拟页面的移动,当然还是不太协调,只能通过duration: 100的设置尽量去模拟。

apiready() {

        api.openFrame({

            name: 'trade_list',

            url: '../trade/trade_list.stml',       //打开上层的页面

            rect: {

                x: 0,

                y: 90,  

                w: 'auto',

                h: api.winHeight - 120

            }

        });

//下拉刷新

        api.setRefreshHeaderInfo({

            visible: true,

            bgColor: '#fff',

            textColor: '#e1017e',

            showTime: true

        }, function (ret, err) {

            api.animation({

                name: 'trade_list',

                duration: 100,

                curve: 'linear',

                autoreverse: true,

                alpha: 0.6,

                translation: {

                    x: 0,

                    y: 50,

                    z: 0

                },

                scale: {

                    x: 1.2,

                    y: 1,

                    z: 1

                },

                rotation: {

                    degree: 45,

                    x: 0,

                    y: 0,

                    z: 1

                }

            }, function (ret, err) {

                api.alert({

                    msg: '动画结束'

                });

            });

            api.refreshHeaderLoadDone();

        });

//上翻加载

        api.addEventListener({

            name: 'scrolltobottom',

            extra: {

                threshold: 10            //设置距离底部多少距离时触发,默认值为0,数字类型

            }

        }, function (ret, err) {

            api.animation({

                name: 'trade_list',

                duration: 200,

                curve: 'linear',

                autoreverse: true,

                alpha: 0.6,

                translation: {

                    x: 0,

                    y: -50,

                    z: 0

                },

                scale: {

                    x: 1.2,

                    y: 1,

                    z: 1

                },

                rotation: {

                    degree: 45,

                    x: 0,

                    y: 0,

                    z: 1

                }

            }, function (ret, err) {

                api.sendEvent({

                    name: 'myEvent',

                    extra: {

                        key1: 'value1',

                        key2: 'value2'

                    }

                });

            });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值