ant-design-pro 顶部检索框展开收缩时,菜单栏的自动收起放开效果实现调查记录 2021-12-02

调查对象

  • 搜索栏未打开状态
    搜索栏未打开状态
  • 搜索栏打开状态
    搜索栏打开状态

情况分析

  • 在点击检索图标时,输入框会展开,左侧菜单会自动收起。
  • 再次点击检索图标时,输入框会收起,左侧菜单会自动展开。
    理论上组件之间应当解耦,所以实现上大概率不会使用组件之间互相调用的方式实现。
    因此,进行了此项调查。

线索链

#ant-design-pro源码
#代码获取方案(花费时间比较长):https://blog.csdn.net/ren365880/article/details/108967683

  • 检索组件“HeaderSearch”在组件“RightContent”中被引用
    检索组件“**HeaderSearch**”在组件“**RightContent**”中被引用

  • 组件“RightContent”在项目入口“app.tsx”中被引用,注释指向ant-design-pro的ProLayout组件
    组件“**RightContent**”在项目入口“**app.tsx**”中被引用

  • ProLayout 组件的确有此属性,并且其菜单属性的配置指向了https://ant.design/components/menu-cn/

  • 链接指向的内容是ant-design框架的menu组件,也就是说目标代码极有可能在这个组件里实现的。
    ant-design的menu组件
    #ant-design源码
    #地址:https://gitee.com/ant-design/ant-design?_from=gitee_search

  • 组件“a-menu”使用了其他库里的组件,组件名是“rc-menu在这里插入图片描述
    在这里插入图片描述

  • 组件“rc-menu”出自“react-component”的一个组件集合
    在这里插入图片描述
    #rc-menu源码
    #地址:https://gitee.com/mirrors_react-component/menu?_from=gitee_search

  • 调查发现“rc-menu”中使用了“rc-overflow”实现了一些功能
    在这里插入图片描述
    在这里插入图片描述

  1. 查看“rc-overflow官网发现例子中的确有目标效果的demo
  • 内容输入前
    在这里插入图片描述
  • 内容输入后(后面的那串数字是输入框)
    在这里插入图片描述

#rc-overflow源码
#地址:https://gitee.com/mirrors_react-component/overflow
9. 组件“rc-overflow”使用组件“rc-resize-observer”实现
在这里插入图片描述
在这里插入图片描述
#rc-resize-observer源码
#地址:https://gitee.com/mirrors_react-component/resize-observer?_from=gitee_search
10. 组件“rc-resize-observer”使用组件“resize-observer-polyfill”实现
在这里插入图片描述
#resize-observer-polyfill源码
#地址:https://gitee.com/mirrors/resize-observer-polyfill
11. 组件“resize-observer-polyfill”通过MutationObserver加监控onresize等事件,实现了对元素宽度发生变化的监听
在这里插入图片描述
12. 浏览器的MutationObserver特性的兼容性意外的不错,感觉可以放心的使用了的感觉。
在这里插入图片描述

总结

最终的实现概述一下也很简单,就是使用MutationObserver对画面所有元素的属性变动进行监听,发生变化时,查看监听的目标元素是否发生了变化,如果发生了变化,就触发事件进行重新调整显示效果。

最终发现实现过程和预想的类似,但是没想到大神写的代码风格,果然还是不太懂,虽然大概看懂了什么意思。

如果有类似的功能需求可以考虑使用以上组件进行完成,毕竟大神们已经为咱们做好了兼容性支持,没有必要再自己去写原生实现了。

通过这次调查又一次对自己的水平没了自信,明天一定要好好的读一下这整套的源码,涨涨见识。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值