• react中使用antd-mobile的dreawer抽屉组件从踩坑到自己造轮子


      1. 如果在使用过程中报这个错,意思是Drawer组件必须有一个子组件children,但现在还未定义

      

       用官方例子解释就是<Drawer>这里面必须要有内容,如下图红色框部分内容</Drawer>

       而这里面的内容一般为自定义代码

      

      2. 如果你想让弹出的侧边导航栏在页面右侧

      

       不要在state中设置

      

         而是要在<Drawer>中如下设置:position='right'

      

       

      3. 上面红色框代码是我自己写的导航栏,有一个logo和一个点击滑出侧边栏的图标,现在要对一些样式进行调整

      去掉am-drawer-content类加的padding-top,设置为0

      接着去掉am-drawer-draghandle样式的width样式,设置宽度为0,让右边的导航条消失

      

      现在要点击该图标侧滑出导航栏

      

      这里一定要给<Drawer></Drawer>中自定义的代码添加onOpenChange事件,

      红色框为自定义代码,箭头所指的部分是给上面截图中的导航栏图标添加点击事件

      

       最后在去掉am-drawer-sidebarbox-shadow阴影样式就行了

      

      后记

      原本到这里就完了,但我的本意是弄成自定义导航栏,如下图

      

       官方示例代码如下

      

       更改以后的代码如下截图,你也可以向下图箭头所指的注释代码那样直接写,但样式需要重写

      

      正当我觉得完全OK时,突然发现一个严重的问题,而我一直没找到方法,导致最终弃用该组件

      该问题为组件的遮罩在没有点击时,它的z-index比我的页面内容还高,这就会导致给页面某个元素

      添加点击事件,任你怎样点都不会有反应,因为点击的始终是你看不到的那层遮罩,而你真正要点击的元素

      在遮罩下面,无奈本人能力有限没解决该问题,最后我自己用CSS3重新写了一个侧滑导航的效果

        不经意间感叹,偶然自己造轮子,其实也挺香的2333

      HTML

                 <div className="nav-mask" id="mask" onClick={this.sideBarClose.bind(this)}></div>
                        <div id="sideNav" className="side-nav">
                            <ul className="side-nav-ul">
                                <li className="side-nav-li" onClick={this.sideBarClose.bind(this)}><Link to="/">首页 </Link></li>
                                <li className="side-nav-li"><Link to="/user/lessonlist">课件</Link></li>
                                <li className="side-nav-li"><Link to="/user/download">下载</Link></li>
                                <li className="side-nav-li"><Link to="/scratch3.0/ide">去创作</Link></li>
                            </ul>
                        </div>

       JS

     //  打开侧滑导航
        sideBarShow() {
            let sideNav = document.getElementById("sideNav");
            let mask = document.getElementById("mask");
            mask.style.display = 'block';
            sideNav.classList.remove("off-show");
            sideNav.classList.add("off-close");
        }
    
        //  关闭侧滑导航
        sideBarClose() {
            let mask = document.getElementById("mask");
            let sideNav = document.getElementById("sideNav");
            mask.style.display = 'none';
            sideNav.classList.remove("off-close");
            sideNav.classList.add("off-show");
        }

       CSS

    /* 侧滑导航 */
    
    .nav-mask {
      display: none;
      position: fixed;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      z-index: 97;
      height: 100%;
      transition: .5s ease all;
      background-color: rgba(0, 0, 0, 0.45);
    }
    
    .side-nav {
        position: fixed;
        top: 0;
        right: 0;
        z-index: 99;
        /* 这里侧滑导航的宽度不能用rem,否则到页面宽度超过750后,无论横竖屏页面都无法铺满 */
        width: 200px;
        height: 100%;
        transform: translateX(300px);
        transition: .5s ease all;
        background-color: #fff;
    
    }
    
    .off-show {
        transform: translateX(300px);
        transition: .5s ease all;
    }
    
    .off-close{
        transform: translateX(0px);
        transition: .5s ease all;
    }
    
    .side-nav-ul {
        width: 100%;
        border-bottom: 1px solid #eee;
    }
    
    .side-nav-li {
        height: 0.6rem;
        line-height: 0.6rem;
        color: #282828;
        text-align: center;
        border-top: 1px solid #eee;
    }
    
    .side-nav-li a {
        display: block;
        color: #282828;
    }
     

      

      

  • 相关阅读:
    阿里云如何打破Oracle迁移上云的壁垒
    第三代DRDS分布式SQL引擎全新发布
    玩转MaxCompute studio SQL编辑器
    如何在阿里云上安全的存放您的配置
    阿里云E-HPC联合安世亚太、联科集团共建云超算生态
    阿里云弹性裸金属服务器-神龙架构(X-Dragon)揭秘
    从保障淘宝到全球市场“第一阵营”,阿里云的DDoS防护之路走了多远?
    飞天技术汇“2018云栖大会·上海峰会”专场,等你加入
    Yeoman:Web 应用开发流程与工具—AngularJS—Bootstrap—js
    【codeforces 550A】Two Substrings
  • 原文地址:https://www.cnblogs.com/tu-0718/p/12989100.html
Copyright © 2020-2023  润新知