红叶都枫了 @163

vue从事件修饰符的角度讨论如何合理的设计一个弹窗

 

 

1.设计思路:弹窗一般可以通过封装,单独设计一个组件,在需要的地方引入并通过变量布尔值进行展示和隐藏,方便使用者进行交互或提示信息

具体操作就是在给这个组件背景层添加全屏固定定位并设置透明度(cover层),其内部设置div(一般白色背景,要求滚动)


/* 弹窗样式 */
.alert-div{
    position: fixed;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    z-index: 999;
    opacity: 1;
    background: rgba(0, 0, 0, 0.35);
    .block{
        position: absolute;
        top: 35%;
        width: 82%;
        left: 50%;
        height: 4.2rem;
        background-color: #fff;
        border-radius: .3rem;
        padding: 0 .26rem .26rem .26rem;
        z-index:1000;
        transform: translateX(-50%);
        background: linear-gradient(180deg, #FFD1D1 0%, #FFFFFF 47%, #FFFFFF 100%);
    }
}
 

 2.事件修饰符控制层级关系:防止内外层点击事件穿透

外层:@click.self="coverClick"
  内层:@click.stop="liClick(item,index,false)"

3.监听弹窗状态布尔值,js控制cover背景层后的页面滑动:

// 根据弹窗状态控制背景页面滑动
scrollStyleToggleAlert(v){
    if(v){
         document.getElementsByTagName('html')[0].style.overflow="hidden";
         document.getElementsByTagName('html')[0].style.height="100%";
         document.body.style.overflow="hidden";
         document.body.style.height="100%";
     }else{
         document.getElementsByTagName('html')[0].style.overflow="";
         document.getElementsByTagName('html')[0].style.height="";
         document.body.style.overflow="";
         document.body.style.height="";
      }
  },

 

posted @ 2022-06-10 14:14  红叶都枫了163  阅读(46)  评论(0编辑  收藏  举报