小程序获取scroll-view中元素位置

小程序通过数据驱动页面,但是有些情况我们需要获取到页面节点信息,小程序文档中给我们提供了wx.createSelectorQuery()方法,通过这个方法我们可以拿到选择元素的很多信息,当调用wx.createSelectorQuery()方法会得到一个SelectorQuery对象实例然后可以调用这个实例中的很多方法:
in,select,selectAll,selectViewport,exec
这些方法的简述可以查阅开发小程序开发文档

现在简单介绍一下获取页面元素中的class为’site-about-info’的按钮信息
获取布局位置的查询请求调用方法nodesRef.boundingClientRect([callback])

queryMultipleNodes: function(){
    var that = this;
    var aboutArr = [];
    wx.createSelectorQuery().selectAll('.site-about-info').boundingClientRect(function(rects){
      rects.forEach(function(rect){
        console.log(rect.bottom);// 节点的下边界坐标
        aboutArr.push(rect.bottom);
      })
      console.log(aboutArr);
      that.setData({
        aboutArr:aboutArr
      })
    }).exec();
  },

最后如果不调用exec(),其他的方法将不执行,exec()方法中的回调函数返回所有请求(demo中boundingClientRect)的值,并将值放置到数组中

这里需要注意如果在请求后调用此方法需要在方法调用时给个延时,否则可能获取不到数据

参考小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/api/wxml-nodes-info.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取当前在 `scroll-view` 内可视的元素,可以使用 `scroll-view` 的 `scroll-into-view` 属性和 `createSelectorQuery` API 来实现。 首先,在需要滚动到的元素上设置一个 `id`,例如: ```html <scroll-view scroll-y="{{true}}" scroll-into-view="{{currentId}}" style="height: 300px;"> <view id="item1">第1个元素</view> <view id="item2">第2个元素</view> <view id="item3">第3个元素</view> <view id="item4">第4个元素</view> <view id="item5">第5个元素</view> <view id="item6">第6个元素</view> <view id="item7">第7个元素</view> <view id="item8">第8个元素</view> </scroll-view> ``` 接下来,在 `Page` 获取当前可视的元素: ```js // 获取 scroll-view 组件 const query = wx.createSelectorQuery() query.select('#scrollView').boundingClientRect() query.selectViewport().scrollOffset() query.exec(function(res) { const scrollViewRect = res[0] const scrollOffset = res[1].scrollTop const windowHeight = wx.getSystemInfoSync().windowHeight const scrollTop = scrollViewRect.top + scrollOffset const scrollBottom = scrollTop + windowHeight const items = [] // 获取可视区域内的元素 query.selectAll('.item').boundingClientRect() query.exec(function(res) { res[0].forEach(function(item) { if (item.top >= scrollTop && item.bottom <= scrollBottom) { items.push(item.dataset.id) } }) console.log('当前可视的元素:', items) }) }) ``` 这里使用 `createSelectorQuery` API 获取 `scroll-view` 组件的位置和滚动位置,然后计算出可视区域的上下边界。接着,再次使用 `createSelectorQuery` API 获取所有带有 `.item` 类的元素位置信息。最后,根据元素位置信息,判断哪些元素在可视区域内,从而得到当前可视的元素

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值