Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
theme-apachecn
提交
78a5632c
T
theme-apachecn
项目概览
OpenDocCN
/
theme-apachecn
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
theme-apachecn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
78a5632c
编写于
6月 03, 2016
作者:
J
Johan Preynat
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve scrolling and update URL
上级
b6abc910
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
79 addition
and
34 deletion
+79
-34
src/js/theme/navigation.js
src/js/theme/navigation.js
+79
-34
未找到文件。
src/js/theme/navigation.js
浏览文件 @
78a5632c
...
...
@@ -30,11 +30,17 @@ function scrollToHash(hash) {
dest
=
getElementTopPosition
(
hash
);
}
// Unbind scroll detection
$scroller
.
unbind
(
'
scroll
'
);
$scroller
.
animate
({
scrollTop
:
dest
},
800
,
'
swing
'
);
},
800
,
'
swing
'
,
function
()
{
// Reset scroll binding when finished
$scroller
.
scroll
(
handleScrolling
);
});
handleScrolling
();
// Directly set chapter as active
setChapterActive
(
null
,
hash
);
}
/*
...
...
@@ -61,58 +67,100 @@ function getElementTopPosition(id) {
return
Math
.
floor
(
dest
);
}
/*
Handle updating summary at scrolling
*/
var
$chapters
;
var
$chapters
,
$activeChapter
;
// Set a chapter as active in summary and update state
function
setChapterActive
(
$chapter
,
hash
)
{
// No chapter and no hash means first chapter
if
(
!
$chapter
&&
!
hash
)
{
$chapter
=
$chapters
.
first
();
}
// If hash is provided, set as active chapter
if
(
!!
hash
)
{
$chapter
=
$chapters
.
filter
(
function
()
{
var
titleId
=
getChapterHash
(
$
(
this
));
return
titleId
==
hash
;
}).
first
();
}
// Don't update current chapter
if
(
$chapter
.
is
(
$activeChapter
))
{
return
;
}
// Update current active chapter
$activeChapter
=
$chapter
;
// Add class to selected chapter
$chapters
.
removeClass
(
'
active
'
);
$chapter
.
addClass
(
'
active
'
);
// Update history state if needed
hash
=
getChapterHash
(
$chapter
);
var
oldUri
=
window
.
location
.
pathname
+
window
.
location
.
hash
,
uri
=
window
.
location
.
pathname
+
hash
;
if
(
uri
!=
oldUri
)
{
history
.
replaceState
({
path
:
uri
},
null
,
uri
);
}
}
// Return the hash of link for a chapter
function
getChapterHash
(
$chapter
)
{
var
$link
=
$chapter
.
children
(
'
a
'
),
hash
=
$link
.
attr
(
'
href
'
).
split
(
'
#
'
)[
1
];
if
(
hash
)
hash
=
'
#
'
+
hash
;
return
(
!!
hash
)?
hash
:
''
;
}
// Handle user scrolling
function
handleScrolling
()
{
// Get current page scroll
var
$scroller
=
getScroller
(),
scrollTop
=
$scroller
.
scrollTop
(),
scrollHeight
=
$scroller
.
prop
(
'
scrollHeight
'
),
clientHeight
=
$scroller
.
prop
(
'
clientHeight
'
),
nbChapters
=
$chapters
.
length
,
foundChapter
=
false
;
// Set a chapter as active
function
setChapterActive
(
$chapter
)
{
foundChapter
=
true
;
$chapters
.
removeClass
(
'
active
'
);
$chapter
.
addClass
(
'
active
'
);
}
var
$scroller
=
getScroller
(),
scrollTop
=
$scroller
.
scrollTop
(),
scrollHeight
=
$scroller
.
prop
(
'
scrollHeight
'
),
clientHeight
=
$scroller
.
prop
(
'
clientHeight
'
),
nbChapters
=
$chapters
.
length
,
$chapter
=
null
;
// Find each title position in reverse order
$
(
$chapters
.
get
().
reverse
()).
each
(
function
(
index
)
{
var
$link
=
$
(
this
).
children
(
'
a
'
),
titleId
=
$link
.
attr
(
'
href
'
).
split
(
'
#
'
)[
1
],
var
titleId
=
getChapterHash
(
$
(
this
)),
titleTop
;
if
(
!!
titleId
)
titleId
=
'
#
'
+
titleId
;
if
(
!!
titleId
&&
!
foundChapter
)
{
if
(
!!
titleId
&&
!
$chapter
)
{
titleTop
=
getElementTopPosition
(
titleId
);
// Set current chapter as active if scroller passed it
if
(
scrollTop
>=
titleTop
)
{
setChapterActive
(
$
(
this
)
);
$chapter
=
$
(
this
);
}
}
// If no
t found at first chapter, se
t as active
if
(
index
==
(
nbChapters
-
1
)
&&
!
foundC
hapter
)
{
setChapterActive
(
$
(
this
)
);
// If no
active chapter when reaching first chapter, set i
t as active
if
(
index
==
(
nbChapters
-
1
)
&&
!
$c
hapter
)
{
$chapter
=
$
(
this
);
}
});
// ScrollTop is at 0, set first chapter anyway
if
(
!
foundC
hapter
&&
!
scrollTop
)
{
setChapterActive
(
$chapters
.
first
()
);
if
(
!
$c
hapter
&&
!
scrollTop
)
{
$chapter
=
$chapters
.
first
(
);
}
//
Finally, set last chapter at the
bottom of page
//
Set last chapter as active if scrolled to
bottom of page
if
(
!!
scrollTop
&&
(
scrollHeight
-
scrollTop
==
clientHeight
))
{
setChapterActive
(
$chapters
.
last
()
);
$chapter
=
$chapters
.
last
(
);
}
setChapterActive
(
$chapter
);
}
/*
...
...
@@ -244,16 +292,13 @@ function preparePage(resetScroll) {
href
=
$link
.
attr
(
'
href
'
).
split
(
'
#
'
)[
0
];
var
resolvedRef
=
url
.
resolve
(
window
.
location
.
pathname
,
href
);
return
window
.
location
.
pathname
==
resolvedRef
;
});
// Bind scrolling if summary contains more than one link to this page
var
$scroller
=
getScroller
();
if
(
$chapters
.
length
>
1
)
{
$scroller
.
scroll
(
function
(
e
)
{
handleScrolling
(
$chapters
);
});
$scroller
.
scroll
(
handleScrolling
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录