随着移动端的发展,我们的网页开发也越来越多样化,响应式也成了前端开发的一个焦点。特别是现在的后台管理系统,都喜欢做个全屏按钮,以及左侧导航的展开收起功能。在这样的情况下,如果我们的页面只是一些简单的标签布局还好,一旦使用了某些插件,比如,echarts,我们就得考虑菜单切换等功能产生的重置问题。

举个例子:假如我们的页面布局分为左边菜单栏和右侧内容区,内容区有很多的echarts图表,左侧的菜单可以展开收起,相应的,内容区会跟着变宽变窄。这个时候,虽然我们的图表做了窗口改变时的自动resize,但图表并不会改变,因为展开收起菜单时,只是页面容器的宽度发生了变化,并没有触发窗口大小的改变,自然也触发不了resize事件。那我们该如何做呢?

一般的方法,可能就是在菜单展开收起的时候,手动触发一次图表的resize事件,这种做法,在图表只有一两个的时候,固然可取。但如果有很多个图表,甚至拿我之前做的可视化项目来说,所有页面都是图表,再用这种方式未免显得太过苍白无力,且代码臃肿。这个时候,我们就该换一种思路来解决了。

既然我们已经为图表添加了窗口改变的监听,那在我们改变菜单的展开收起时,手动触发一次窗口的resize事件不就可以了吗。如何触发呢,且看下面的代码

你只需调用一下该方法即可,已做了兼容处理,IE 可用,亲测有效,也是本人项目中在使用的。

 

event.initEvent 参数说明:

demo演示

 

值得一提的是,上面讲的 document.createEvent 属于老方法,新的 api 为new Event(),使用方法如下:

参考链接:https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

但是该方法不支持 IE 浏览器,支持 edge 浏览器,出于微软都已经放弃了IE的角度考虑,建议使用该方法。如果你的公司有老顽固的存在,就还是乖乖的用上面的方法吧。