• space-between最后一栏的填充问题(不使用v-if)


    在采用弹性布局,接着使用justfiy-content:space-between来进行操作的时候会遇到如下问题

    也就是说当栏目数目不够,无法填充完整一栏的时候就会出现这种情况

    解决方法如下(代码下有解析),此处我用的是vue

    第一步

    以四列为例

      <div class="ItemContainer" v-for="indexa in (4-current.length%4)" :key="indexa+'a'"></div>
    

    首先和大家想的一样,使用空div来解决

    是利用取余的方式对整个长度进行取余,然后用每行的个数减去余数得出需要填充的div数目

    for循环然后填充空的div来解决

    效果如下

    炸一看效果不错,但是其中存在着问题,当我们将最有一个格子渲染在页面上的时候就会发现问题所在

    此处我渲染了一个1,再来查看效果

      <div class="ItemContainer" v-for="indexa in (4-current.length%4)" :key="indexa+'a'">1</div>
    

    似乎还不错,有几个空的就补了几个,然而当数量填满的时候会出现如下问题

    结合代码看一下

      <div class="ItemContainer" v-for="indexa in (4-current.length%4)" :key="indexa+'a'">1</div>
    

    当栏目数目为12时,12%4结果自然为0,4-0结果为4所以就出现了四个,目前最后一行和填充的div数目对应关系如下

    最后一行的数目 需要填充的div数目 我们的式子计算出来的结果
    1 3 4-1=3
    2 2 4-2=2
    3 1 4-3=1
    4 0 4-0=4

    也就是说在没有多出,即current.length%4的值为0的时候会出现问题

    看到很多人用v-for结合v-if进行解决,然而官方文档是这样解释的: 当 v-ifv-for 一起使用时,v-for 具有比 v-if 更高的优先级。

    我的解决方式如下,

             <div class="ItemContainer" v-for="indexa in ((4-current.length%4)===4?[]:4-current.length%4)" :key="indexa+'a'"></div>
    

    既然在最后一个会出现问题,那么就使用一个三目运算进行判定,当计算出来的值为4的时候就是用一个空数组来代替,即没有元素,其他情况下正常输出即可

    完成收工!!

  • 相关阅读:
    谷歌地球服务器"失联"的替代方案
    Win32Api -- 回到Windows桌面
    WPF -- 应用启动慢问题
    Windows -- 多网卡上网设置
    .Net -- ConfigurationSection的简单使用
    WPF -- 使用RenderTargetBitmap将Canvas保存为图片
    WPF -- 使用当前进程打开自定义文件的一种方式
    WPF源码阅读 -- InkCanvas选中笔迹
    WPF源码阅读 -- InkCanvas选择模式
    WPF -- 使用Blend工具绘制Control样式
  • 原文地址:https://www.cnblogs.com/axu1997/p/12821552.html
Copyright © 2020-2023  润新知