Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
计算机应用开发
前端
Vuepress
提交
b0c9e11c
V
Vuepress
项目概览
计算机应用开发
/
前端
/
Vuepress
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
Vuepress
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b0c9e11c
编写于
5月 24, 2018
作者:
U
ULIVZ
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor: load 'active header links' on demand
上级
4c09627d
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
68 addition
and
44 deletion
+68
-44
lib/app/root-mixins/activeHeaderLinks.js
lib/app/root-mixins/activeHeaderLinks.js
+47
-0
lib/app/root-mixins/index.js
lib/app/root-mixins/index.js
+7
-1
lib/default-theme/Layout.vue
lib/default-theme/Layout.vue
+0
-42
lib/prepare.js
lib/prepare.js
+1
-1
lib/webpack/createBaseConfig.js
lib/webpack/createBaseConfig.js
+13
-0
未找到文件。
lib/app/root-mixins/activeHeaderLinks.js
0 → 100644
浏览文件 @
b0c9e11c
import
store
from
'
@app/store
'
import
throttle
from
'
lodash.throttle
'
export
default
{
mounted
()
{
window
.
addEventListener
(
'
scroll
'
,
this
.
onScroll
)
},
methods
:
{
onScroll
:
throttle
(
function
()
{
this
.
setActiveHash
()
},
300
),
setActiveHash
()
{
const
sidebarLinks
=
[].
slice
.
call
(
document
.
querySelectorAll
(
'
.sidebar-link
'
))
const
anchors
=
[].
slice
.
call
(
document
.
querySelectorAll
(
'
.header-anchor
'
))
.
filter
(
anchor
=>
sidebarLinks
.
some
(
sidebarLink
=>
sidebarLink
.
hash
===
anchor
.
hash
))
const
scrollTop
=
Math
.
max
(
window
.
pageYOffset
,
document
.
documentElement
.
scrollTop
,
document
.
body
.
scrollTop
)
for
(
let
i
=
0
;
i
<
anchors
.
length
;
i
++
)
{
const
anchor
=
anchors
[
i
]
const
nextAnchor
=
anchors
[
i
+
1
]
const
isActive
=
i
===
0
&&
scrollTop
===
0
||
(
scrollTop
>=
anchor
.
parentElement
.
offsetTop
+
10
&&
(
!
nextAnchor
||
scrollTop
<
nextAnchor
.
parentElement
.
offsetTop
-
10
))
if
(
isActive
&&
decodeURIComponent
(
this
.
$route
.
hash
)
!==
decodeURIComponent
(
anchor
.
hash
))
{
store
.
disableScrollBehavior
=
true
this
.
$router
.
replace
(
decodeURIComponent
(
anchor
.
hash
),
()
=>
{
// execute after scrollBehavior handler.
this
.
$nextTick
(()
=>
{
store
.
disableScrollBehavior
=
false
})
})
return
}
}
}
},
beforeDestroy
()
{
window
.
removeEventListener
(
'
scroll
'
,
this
.
onScroll
)
}
}
lib/app/root-mixins/index.js
浏览文件 @
b0c9e11c
import
updateMeta
from
'
./updateMeta
'
export
default
[
updateMeta
]
import
activeHeaderLinks
from
'
@activeHeaderLinks
'
console
.
log
(
activeHeaderLinks
)
export
default
[
updateMeta
,
// required
activeHeaderLinks
// optional
]
lib/default-theme/Layout.vue
浏览文件 @
b0c9e11c
...
...
@@ -28,9 +28,7 @@ import Navbar from './Navbar.vue'
import
Page
from
'
./Page.vue
'
import
Sidebar
from
'
./Sidebar.vue
'
import
{
pathToComponentName
}
from
'
@app/util
'
import
store
from
'
@app/store
'
import
{
resolveSidebarItems
}
from
'
./util
'
import
throttle
from
'
lodash.throttle
'
export
default
{
components
:
{
Home
,
Page
,
Sidebar
,
Navbar
},
...
...
@@ -88,8 +86,6 @@ export default {
},
mounted
()
{
window
.
addEventListener
(
'
scroll
'
,
this
.
onScroll
)
// configure progress bar
nprogress
.
configure
({
showSpinner
:
false
})
...
...
@@ -106,10 +102,6 @@ export default {
})
},
beforeDestroy
()
{
window
.
removeEventListener
(
'
scroll
'
,
this
.
onScroll
)
},
methods
:
{
toggleSidebar
(
to
)
{
this
.
isSidebarOpen
=
typeof
to
===
'
boolean
'
?
to
:
!
this
.
isSidebarOpen
...
...
@@ -131,40 +123,6 @@ export default {
this
.
toggleSidebar
(
false
)
}
}
},
onScroll
:
throttle
(
function
()
{
this
.
setActiveHash
()
},
300
),
setActiveHash
()
{
if
(
this
.
$site
.
themeConfig
.
disableActiveHash
)
{
return
}
const
sidebarLinks
=
[].
slice
.
call
(
document
.
querySelectorAll
(
'
.sidebar-link
'
))
const
anchors
=
[].
slice
.
call
(
document
.
querySelectorAll
(
'
.header-anchor
'
))
.
filter
(
anchor
=>
sidebarLinks
.
some
(
sidebarLink
=>
sidebarLink
.
hash
===
anchor
.
hash
))
const
scrollTop
=
Math
.
max
(
window
.
pageYOffset
,
document
.
documentElement
.
scrollTop
,
document
.
body
.
scrollTop
)
for
(
let
i
=
0
;
i
<
anchors
.
length
;
i
++
)
{
const
anchor
=
anchors
[
i
]
const
nextAnchor
=
anchors
[
i
+
1
]
const
isActive
=
i
===
0
&&
scrollTop
===
0
||
(
scrollTop
>=
anchor
.
parentElement
.
offsetTop
+
10
&&
(
!
nextAnchor
||
scrollTop
<
nextAnchor
.
parentElement
.
offsetTop
-
10
))
if
(
isActive
&&
decodeURIComponent
(
this
.
$route
.
hash
)
!==
decodeURIComponent
(
anchor
.
hash
))
{
store
.
disableScrollBehavior
=
true
this
.
$router
.
replace
(
decodeURIComponent
(
anchor
.
hash
),
()
=>
{
// execute after scrollBehavior handler.
this
.
$nextTick
(()
=>
{
store
.
disableScrollBehavior
=
false
})
})
return
}
}
}
}
}
...
...
lib/prepare.js
浏览文件 @
b0c9e11c
...
...
@@ -43,7 +43,7 @@ module.exports = async function prepare (sourceDir) {
await
writeTemp
(
'
routes.js
'
,
[
componentCode
,
routesCode
].
join
(
'
\n
\n
'
))
].
join
(
'
\n
'
))
// 3. generate siteData
const
dataCode
=
`export const siteData =
${
JSON
.
stringify
(
options
.
siteData
,
null
,
2
)}
`
...
...
lib/webpack/createBaseConfig.js
浏览文件 @
b0c9e11c
...
...
@@ -2,6 +2,7 @@ const path = require('path')
module
.
exports
=
function
createBaseConfig
({
siteConfig
,
siteData
,
sourceDir
,
outDir
,
publicPath
,
...
...
@@ -56,6 +57,18 @@ module.exports = function createBaseConfig ({
.
add
(
path
.
resolve
(
__dirname
,
'
../../../
'
))
.
add
(
'
node_modules
'
)
// Load extra root mixins on demand.
const
{
activeHeaderLinks
=
true
}
=
siteData
.
themeConfig
const
rootMixinsLoadingConfig
=
{
activeHeaderLinks
}
for
(
const
mixinName
in
rootMixinsLoadingConfig
)
{
const
enabled
=
rootMixinsLoadingConfig
[
mixinName
]
config
.
resolve
.
alias
.
set
(
`@
${
mixinName
}
`
,
enabled
?
path
.
resolve
(
__dirname
,
`../app/root-mixins/
${
mixinName
}
.js`
)
:
path
.
resolve
(
__dirname
,
'
./noopModule.js
'
)
)
}
config
.
resolveLoader
.
set
(
'
symlinks
'
,
true
)
.
modules
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录