Skip to content

Conversation

@fy0
Copy link
Contributor

@fy0 fy0 commented Aug 30, 2017

花了大半天做了几个修改,还有几个问题找不到在哪改,感觉好多细节问题啊……

已修正问题:

1. 加载谜之路径侧边栏

snipaste_20170830_100211

image

这项修改我是存疑的,不知道作者初始意图是什么,但在这里我个人认为 basePath 与文档文件路径再叠加一次有点奇怪吧?应该是bug

2. 侧边栏不能点亮问题

image

在看代码之前,我一直以为这个是feature,翻了一下发现不对劲啊?明明有实现的,然后打印信息看了一下。

image

结果是这样的:

image

然后我看了一下定位的那个元素

image

。。。

3. 平滑滚动以及点击反馈修正

问题2的衍生问题。

这里的问题是,如果右侧足以容纳若干项定位点,那么左侧导航将被永远锁在右侧最顶上的那一个。下面的你点了也不会有反馈,尽管url会变化。

image

这里我为了在点击后进行 scrollIntoView 滚动时不让 scroll 事件起效引入了 tweezer.js

弃用 scrollIntoView 的原因是我发现 scrollIntoView 是异步的,给出的选项太少了,滚动不能调速度也没有 callback,这就导致我根本不可能在滚动时关掉事件完成后弄回来。

平滑滚动就是一个副产品了。


其他已知问题:

1. 某情况下点击反馈无效
跟问题3类似的场景,也就是右边容纳了不止一个定位点。

当你点击了最底下的那个边栏导航,然后刷新。

点亮的项就会锁在更上面一个,与当前url中id相同的一项无法点击。

2. 边栏下级菜单消失问题
我试了多次一直没找到稳定的复现方式,总之经常莫名出现三级菜单点不出来的问题,不是很懂怎么弄。 很影响体验。
3. 不能点击二级菜单回顶
这个我不知道是不是故意的设计,二级菜单id是 null 所以点了之后啥也不会发生。

例如docsify文档里的 Quick start,比如说你在这个地址

https://docsify.js.org/#/quickstart?id=preview-your-site

并不能通过点击 Quick start 回顶


  • Make sure you are merging your commits to master branch.
  • Add some descriptions and refer relative issues for you PR.
  • DO NOT include files inside lib directory.
@QingWei-Li
Copy link
Member

QingWei-Li commented Aug 30, 2017

感谢 PR!

  1. 加载谜之路径侧边栏

这个不是 bug,设计初衷是每级目录都有自己的 sidebar 和 navbar,例如多级目录文档,或者多语言的文档,因为并不知道文件是否存在,所以都会加载一次。其实可以设置 alias 规避这个问题

某情况下点击反馈无效

应该是 scrollIntoView 同一个问题?

不能点击二级菜单回顶

没考虑到,欢迎 PR


// Load sidebar
loadNested(path, loadSidebar, fn, this, true)
loadNested('/', loadSidebar, fn, this, true)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里还是要保留,原因已经回复在 comment 了 : )

@fy0
Copy link
Contributor Author

fy0 commented Aug 30, 2017

@QingWei-Li

这个不是 bug,设计初衷是每级目录都有自己的 sidebar 和 navbar,例如多级目录文档,或者多语言的文档,因为并不知道文件是否存在,所以都会加载一次。其实可以设置 alias 规避这个问题

这个我觉得换 sidebar 是个不怎么妙的主意。很显然绝大多数情况下都没有这个需求,也几乎没有文档这么做。更何况已经有了 basePath,多语言直接切 basePath 即可。唯一可能的情景是大项目中跳转子项目文档,但这种情况超链接给 html 不是更好吗?更别提其实这种情况切basePath也一样可以做到,所以没有必要。

应该是 scrollIntoView 同一个问题?

不是同一个问题。好吧,或许可以给 scroll 加个开关,让他首次被调用的时候无效(首次调用几乎可以肯定是页面加载完成后来一下)。如果没有其他地方影响的话应该就可以了。

@QingWei-Li
Copy link
Member

第一个问题最主要的使用场景是多语言文档,例如 docsify 提供的三国语言文档,那么侧边栏内容肯定就是要根据语言显示不同内容。所以目录结构就像这样

zh-cn/ -|_sidebar.md -|README.md de-de/ -|_sidebar.md -|README.md

所以 docsify 才需要根据不同路径显示不同侧边栏

唯一可能的情景是大项目中跳转子项目文档,但这种情况超链接给 html 不是更好吗

做不到,整个文档其实就只有一个入口文件。跳转到子目录,入口文件还是根目录的 index.html 其实所谓的路由是在 docsify 里维护的。如果你说的一个目录下放一个 index.html 那也可以,但这就不是我设计的初衷了。我只想最大可能的简单,一个 index.html 即可。

@fy0
Copy link
Contributor Author

fy0 commented Aug 30, 2017

@QingWei-Li

我大致明白意思了,切换语言是直接切换目录,所以需要分别加载相关md。

实际上我在 404 之后改为从 '/' 进行加载也是一种退而求其次的做法,因为我的目录结构是这样:

- 快速开始 - [背景](quickstart/background.md) - [基础设计](quickstart/design.md) - [简单示例](quickstart/helloworld.md) 

侧边栏的基准点会从一级目录里跟到二级目录 quickstart 里面,导致 404。

那据此看来在当前机制下无解,也只能试试 alias 了。

@fy0
Copy link
Contributor Author

fy0 commented Aug 30, 2017

已修改 等提交CI了

希望有空能查查那个不明的三级菜单展不开的问题。

我难以找到复现条件,直觉觉得可能是相关的数据缓存出了问题,对代码不熟做不到定位,希望作者能抽空研究一下。

项目不错,请再接再厉

(题外话:隔壁docute抠细节比这里细致多了,只是觉得排版上不太如意)

@QingWei-Li QingWei-Li merged commit 4ce118d into docsifyjs:master Aug 30, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants