如何在flex弹性盒子内控制某个元素的宽度扩大方向

我们在一个弹性盒子中,对某一个元素进行查看时,为了更好的视觉效果,我们可以设置交互来实现

如实现这种类似的效果,当鼠标移入时,我们使元素的宽度进行扩大来达到这种效果,

当然为了更好的视觉体验,我们这个盒子进行了移出隐藏

但是这也出现了一个问题 当我们进行展示最后一个元素的内容时 效果确是这样的

 元素按照原来的规则进行了向右扩大 使得超出的内容被隐藏了

 好了进入正题 如何解决

在弹性盒子中     

    display: flex;
    overflow: hidden;
    justify-content: flex-start;

设置该属性 可以使得元素在主轴上的排列方式,而这也决定了元素的扩大方式 这段代码也就是让元素(左————>右)进行排列

所以我们设置

    display: flex;
    overflow: hidden;
    justify-content:flex-end

就能解决问题 

但是这有一个bug 设置之后 该盒子内的所有元素都将按照这个规则进行扩大,所以第一个元素就出现了上面的问题

 所以我们应该动态的决定何时盒子是 flex-start 何时是 flex-end 

接下来是我的代码示例

 isLast就是一个boolean 类型的值

为什么不用css控制

我最开始想的是能否使用css变量在子类中重定义来控制父类,但是这是不可行的

我经过反复的测试,这是行不通的,所以选择了js

重复测试以后出现抖动,视觉体验不好

在如上设置以后,反复在最后一个和其他元素之间反复横跳,发现出现抖动,这就是因为js处理太快,在上一个元素还没有回复如初时就已经重新设置了排列方式,从而出现了抖动

我想到的是加一个定时器来控制

let timer:number
function isLastElem(val:number){
    if ( val === props.data.list.length - 1 ) {
        timer = setInterval(() => {
            isLast.value = true
        },300)
    } else {
        timer = setInterval(() => {
            isLast.value = false
        },300)
    }
}
function isLeave(){
    if (timer) {
        clearInterval( timer )
    }
}

子元素中还需要设置动画延迟 延迟时间当然和定时器时间相同才能达到更好的效果

    &:hover{
        transition-delay: 0.3s;
        width: 341px;
    }

当然交叉轴的扩大方向的解决方式应该也是一样的,我没有测试过 理论应该行得通

这样就能完美解决啦!有什么问题欢迎指正 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值