getRect(selector, all = false)

    • selector 此参数为元素节点,可以是id或者class,比如”#user-name”,”.box”
    • all 是否返回全部节点信息,当页面有多个相同selector的元素时,alltrue,会以数组形式返回所有节点的信息(结果为数组,数组元素为对象),否则只返回第一个节点的信息(结果为一个对象)

    注意:该方法返回的结果,共有如下有用信息:

    受限于nodesRef.boundingClientRect,其上结果中的lefttoprightbottom,是会随着页面滚动而变化的,因为这个查询的相对于屏幕窗口,而不是 相对于页面根元素的,但widthheight,是恒定不变的,所以一般情况我们推荐您想要获取节点宽高的时候采用这个方法。

    由于onLoad生命周期元素尚未创建完成,请勿在此生命周期使用此方法,如果是页面,应该在onReady生命周期,组件内应该在mounted生命周期调用。 如果要查询的目标,是通过服务端获取数据后才渲染的,那么应该在获取数据后,通过this.$nextTick调用此方法。

    异步使用方法

    通过then调用即可

    1. export default {
    2. methods: {
    3. getElInfo() {
    4. this.$u.getRect('.user-avatar').then(res => {
    5. console.log(res);
    6. })
    7. }
    8. }
    9. }

    同步使用方法

    请求数据后再获取节点信息

    此场景为元素内容为后端获取数据填充的,节点填充数据前后,元素的大小尺寸是不一样的,所以需要在获取后再执行此方法,这里通过this.$nextTick调用, 是因为它会等待数据赋值,元素创建完成后再执行,此时才是准确的尺寸,以下演示,为uView自带的方法调用

    1. <template>
    2. <view>
    3. <view class="user-name">
    4. {{userName}}
    5. </view>
    6. </template>
    7. <script>
    8. export default {
    9. data() {
    10. return {
    11. userName: ''
    12. }
    13. onLoad() {
    14. this.getElInfo();
    15. },
    16. methods: {
    17. getElInfo() {
    18. this.$u.post('http://www.example.com/user/info').then(res => {
    19. this.userName = res.name;
    20. this.$nextTick(() => {
    21. this.$u.getRect('.user-avatar').then(rect => {
    22. console.log(rect);
    23. })
    24. })
    25. })
    26. }
    27. }
    28. }
    29. </script>

    获取全部节点信息

    设置第二个参数为true,此场景为页面有多个相同类名的元素,需要获取所有同类名节点信息时候使用,返回结果为一个数组

    如何让让某个元素滚动到页面顶部

    1. <template>
    2. <view class="wrap">
    3. <view class="item">
    4. uView UI
    5. </view>
    6. <view class="item">
    7. uView UI
    8. </view>
    9. <view class="item">
    10. </view>
    11. <view class="item">
    12. uView UI
    13. </view>
    14. 点我,我就会滚动到导航栏下方
    15. </view>
    16. </view>
    17. </template>
    18. <script>
    19. export default {
    20. data() {
    21. return {
    22. scrollTop: 0,
    23. }
    24. },
    25. onPageScroll(e) {
    26. this.scrollTop = e.scrollTop;
    27. },
    28. methods: {
    29. scrollEl() {
    30. this.$u.getRect('.object-item').then(res => {
    31. uni.pageScrollTo({
    32. scrollTop: this.scrollTop + res.top,
    33. duration: 0
    34. })
    35. })
    36. }
    37. }
    38. }
    39. </script>
    40. <style lang="scss" scoped>
    41. .wrap {
    42. height: 200vh;