只有翅膀
只有翅膀
  • 发布:2022-06-01 17:30
  • 更新:2022-06-02 16:47
  • 阅读:542

求教:如何获取margin?

分类:uni-app

使用 boundingClientRect 和 fields 试过了。只能获取到元素的 width/height 无法获取到元素的margin 请问怎么得到具体的margin值?

目前遇到的问题是这样: 整体布局采用flex justify-content: space-around; 为了处理最后一行补位元素。我需要通过 页面宽度与每个 元素占用宽度 进行计算值。好知道到底需要几个占位元素。 直接使用元素的宽度,则不准确。总是差了那么一点(因为 元素增加了margin 而margin又不是固定的);

由于获取不到准确的元素占用尺寸,导致我现在 的占位符 经常性的多了一个。
求解决方案

2022-06-01 17:30 负责人:无 分享
已邀请:
DCloud_UNI_WZF

DCloud_UNI_WZF

需求中每一行元素的数量是固定的吗,如果是的话您看下这种方式是否可以满足需求。

<template>  
    <view class="content">  
        <view   
        class="item"   
        :class="{'placeholder-dom':item.id===0}"   
        v-for="(item,index) in list"   
        :key="index">{{item.id}}</view>  
    </view>  
</template>  

<script setup>  
    import {ref} from 'vue'  

    const list = ref([])  

    for(let i = 0;i<11;i++){  
        list.value.push({  
            id:i+1,  
        })  
    }  

    if(list.value.length%3){  
        const num = 3-list.value.length%3  
        for(let i = 0;i<num;i++){  
            list.value.push({  
                id:0  
            })  
        }  
    }  
</script>  

<style>  
    .content{  
        display: flex;  
        flex-wrap: wrap;  
        justify-content: space-around;  
    }  
    .content .item{  
        width: 200rpx;  
        height: 200rpx;  
        margin-top: 20rpx;  
    }  
    .content .item:not(.placeholder-dom){  
        background-color: aqua;  
    }  
</style>
  • 只有翅膀 (作者)

    非常感谢你的解答。但这种无法满足需求。 因为我是要做屏幕适配,数组长度不固定,且每行所拥有的元素数也不固定。所以才需要用到 父窗口宽度 / 元素的占位宽度 取整 来获得 每行到底应该有多少个元素。

    2022-06-02 09:38

  • DCloud_UNI_WZF

    回复 只有翅膀: 意思是在不同屏幕下,元素的宽度都是固定大小,所以 屏幕宽度不同,每行元素个数不同?

    2022-06-02 09:48

  • 只有翅膀 (作者)

    回复 w***@dcloud.io: 是的。

    2022-06-02 09:58

只有翅膀

只有翅膀 (作者) - 80后IT老男人

问题已解决。 在拥有margin的元素外面再套一层元素,检查外套元素的尺寸,则得到拥有margin的数值。除了多一层渲染,增加了稍许负担外,完美解决问题。

该问题目前已经被锁定, 无法添加新回复