Windows的灵魂是什么?当然是Window,当方便快捷的多窗口进入人们视野的时候,大家无不为之惊呼太好用了!! 弹窗是我们熟视无睹的一种交互方式,经常用到,但从没好好想过这种交互行为背后的意义...
Windows的灵魂是什么?当然是Window,当方便快捷的多窗口进入人们视野的时候,大家无不为之惊呼太好用了!!
当你需要保持当前任务运行,同时开启一个新任务时,就需要多线程。弹窗何尝不是一种交互领域的多线程?它可以挂起当前的操作流,然后开辟一片全新的操作区域,让用户重新开始一条新的操作流,并且等待其完成后还可以重新返回之前的操作环境。
有的UI设计师讨厌弹窗,觉得不美观,我不知道为什么?当你把一个弹窗放到最大,充满整个视口,你会发现这不就是一个所谓的Page吗?
为了保持当前的滚动位置,用户的操作环境等,最简单的办法就是使用弹窗,不销毁底下的Dom元素,这不就是keep-alive吗?
Window?Dialog?Modal?傻傻分不清楚,我也分不清楚,但我们也不用去杠,就是一个命名而已。我们可以约定,Window特指那些重量级的弹窗,而Dialog和Modal特指轻量级弹窗。
我们借用浏览器的Tab窗口来看:
我们习惯用Single-Page-Application来模拟浏览器的多页,从而可以更自由的控制页面间的跳转体验,但一直缺乏一种对Window窗口的模拟。在多页中我们可以一句话让一个页面在新窗口中打开,比如:<a href="xxx" target="_blank">或者window.open(xxx),然而在SPA中即便是操作一个Dialog都是相对麻烦的事情,况且Dialog也不能算是Window。
基于以上分析,个人实现了一个基本能满足需求的虚拟Window。
先看看效果:虚拟Window
之所以说它是虚拟Window,而非Dialog,理由如下:
全局Store,类似于实现与外界隔离的运行环境。<Link to="/article/list/index" action="push" target="window">:新窗口打开<Link to="/article/list/index" action="push" target="page">:本窗口打开keep-alive优点是用户体验好,缺点是太TM占资源(需要缓存所有Dom元素还有相关内存变量),现在使用虚拟Windw,你想keep-alive你就在新窗口中打开,不想keep-alive就在原窗口中打开,随意控制。虚拟Window也算是摸着石头过河,大家有什么意见、想法、改进思路,都欢迎提供哦...
最后附上项目地址: