uni-app 小程序页面滚动到指定位置,相对位置计算

fe2c24adb7cdf9a25e53348fa4705b4b.gif

我有一个页面需要定位也就是需要点击定位按钮页面滚动到指定的位置

69972d15b9a4d29890f1ca4c5b786543.png

查了一下UNI-APP的API,发现可以有API可以进行页面定位

uni.pageScrollTo({
        scrollTop: 0, // 滚动到页面的目标位置(单位px)
        duration: 300 // 滚动动画的时长,默认300ms,单位 ms
    });
uni.pageScrollTo({
        selector: "#id", // 找到ID滚动到指定位置
        duration: 300 // 滚动动画的时长,默认300ms,单位 ms
    });

一个是指定位置,像素级指定,但你必须知道每个人的格子的位置,那么还有一个selector 可以用,我可以指定每一个格子的ID,比如张三的格子,ID:张三, 王五:ID王五。

代码一跑,页面是滚动起来了,但是不对啊。我定位王王,但

只滚动到了李四的位置,王五在外面,没显示出来。

检查了高度,发现只是王五那一排 及以后的各排,都只定位到李四位置,他就是他们组的外层。这可不行。

于是利用了另一个API来获取组件的位置信息

uni.createSelectorQuery().select("#王五")
          .boundingClientRect((res) => {
            console.log(res.top)
          }).exec()

res.top 就是外层VIEW的位置,也就是李四所在的位置。

想了想,那是不是res.top+行数x行高不就可以滚动到相应的位置了。

index 为王五的索引,也就是下标,下标+1/3行-1 就是相对位置了,再乘以行高不就解决了。

//相对位置计算
        var ntop = Math.ceil((index+1) /3)-1;
        console.log(ntop,index);

数据结构是这样滴。

datalist:[
   {class:"一班","details":[]},
   {class:"二班","details":[]}   
]

最终就是这样了。

var input = this.keyword2
        console.log("我在找id", input)
        if(!input){
          return;
        }
        var _this = this;
        var mylist = [];
        //找到人员的INDEX


        var mylist = this.datalist;
        var index = -1;
        for (var lni = 0; lni < mylist.length; lni++) {
          var index = mylist[lni].details.findIndex((row, rowidx) => row.missno == input);
          if (index >= 0) {
            break;
          }
        }
        if (index < 0) {
          this.$msg("没有此号")
          return;
        }


        //相对位置计算
        var ntop = Math.ceil((index+1) /3)-1;
        console.log(ntop,index);


        uni.createSelectorQuery().select("#a" + input)
          .boundingClientRect((res) => {


            console.log(res);
            uni.pageScrollTo({
              scrollTop: res.top + ntop * 125.5,
              success: function() {
                _this.$msg("跳转成功");


              },
              fail: function() {
                _this.$msg("没有找到")
              }
            })
          }).exec()

猫猫的心里话

加菲猫的VFP|狐友会社群接收投稿啦

加菲猫的VFP,用VFP不局限VFP,用VFP混合一切。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。

商业模式,销售技巧、需求规划、产品设计的知识通通可以发表。

暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。

如何帮助使用VFP的人?

用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。

我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。

加菲猫的vfp倡导用"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"

我已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。

2023年狐友会社群会员继续招募中

社群会员获取的权益有:

祺佑三层开发框架商业版(猫框),终身免费升级,终身技术支持。

开放的录播课程有:

微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。

源码类资源有:

支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。

会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务

c6abc1addb64375f80d2f7cd67c7d819.gif

949a323fc2b66acf0de845d52e16f5e3.jpeg

22d1ecb330bc419eb46ec355f24e2375.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值