Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
theme-apachecn
提交
d94e91cd
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 搜索 >>
提交
d94e91cd
编写于
6月 03, 2016
作者:
J
Johan Preynat
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Handle summary update at scrolling
上级
69fed7ad
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
102 addition
and
15 deletion
+102
-15
src/js/theme/navigation.js
src/js/theme/navigation.js
+102
-15
未找到文件。
src/js/theme/navigation.js
浏览文件 @
d94e91cd
...
...
@@ -23,28 +23,96 @@ function getScroller() {
Scroll to a specific hash tag in the content
*/
function
scrollToHash
(
hash
)
{
var
$scroller
=
getScroller
()
;
var
dest
=
0
;
var
$scroller
=
getScroller
()
,
dest
=
0
;
if
(
hash
)
{
dest
=
$scroller
.
find
(
hash
).
position
().
top
;
dest
=
getElementTopPosition
(
hash
)
;
}
$scroller
.
animate
({
scrollTop
:
dest
},
800
,
'
swing
'
);
// Update summary active chapter
$
(
'
.book-summary
'
).
find
(
'
.chapter.active
'
).
removeClass
(
'
active
'
);
$
(
'
.book-summary .chapter > a
'
).
each
(
function
()
{
var
uri
=
url
.
resolve
(
window
.
location
.
pathname
,
$
(
this
).
attr
(
'
href
'
)),
windowLocation
=
window
.
location
.
pathname
+
window
.
location
.
hash
;
handleScrolling
();
}
/*
Return the top position of an element
*/
function
getElementTopPosition
(
id
)
{
// Get actual position of element if nested
var
$scroller
=
getScroller
(),
$container
=
$scroller
.
find
(
'
.page-inner
'
),
$el
=
$scroller
.
find
(
id
),
$parent
=
$el
.
offsetParent
(),
dest
=
0
;
dest
=
$el
.
position
().
top
;
while
(
!
$parent
.
is
(
$container
))
{
$el
=
$parent
;
dest
+=
$el
.
position
().
top
;
$parent
=
$el
.
offsetParent
();
}
// Return rounded value since
// jQuery scrollTop() returns an integer
return
Math
.
floor
(
dest
);
}
/*
Handle updating summary at scrolling
*/
var
$chapters
;
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
'
);
}
// Find each title position in reverse order
$
(
$chapters
.
get
().
reverse
()).
each
(
function
(
index
)
{
var
$link
=
$
(
this
).
children
(
'
a
'
),
titleId
=
$link
.
attr
(
'
href
'
).
split
(
'
#
'
)[
1
],
titleTop
;
if
(
!!
titleId
)
titleId
=
'
#
'
+
titleId
;
if
(
!!
titleId
&&
!
foundChapter
)
{
titleTop
=
getElementTopPosition
(
titleId
);
// Same page
if
(
uri
==
windowLocation
)
{
$
(
this
).
parent
(
'
.chapter
'
).
addClass
(
'
active
'
);
// Set current chapter as active if scroller passed it
if
(
scrollTop
>=
titleTop
)
{
setChapterActive
(
$
(
this
));
}
}
// If not found at first chapter, set as active
if
(
index
==
(
nbChapters
-
1
)
&&
!
foundChapter
)
{
setChapterActive
(
$
(
this
));
}
});
// ScrollTop is at 0, set first chapter anyway
if
(
!
foundChapter
&&
!
scrollTop
)
{
setChapterActive
(
$chapters
.
first
());
}
// Finally, set last chapter at the bottom of page
if
(
!!
scrollTop
&&
(
scrollHeight
-
scrollTop
==
clientHeight
))
{
setChapterActive
(
$chapters
.
last
());
}
}
/*
...
...
@@ -132,14 +200,14 @@ function handleNavigation(relativeUrl, push) {
$
(
'
.book
'
).
attr
(
'
class
'
,
bodyClass
);
$
(
'
.book-summary
'
).
scrollTop
(
scrollPosition
);
// Update state
gitbook
.
state
.
$book
=
$
(
'
.book
'
);
preparePage
(
!
hash
);
// Scroll to hashtag position
if
(
hash
)
{
scrollToHash
(
hash
);
}
// Update state
gitbook
.
state
.
$book
=
$
(
'
.book
'
);
preparePage
(
!
hash
);
})
.
fail
(
function
(
e
)
{
location
.
href
=
relativeUrl
;
...
...
@@ -168,6 +236,25 @@ function preparePage(resetScroll) {
// Reset scroll
if
(
resetScroll
!==
false
)
$bookInner
.
scrollTop
(
0
);
$bookBody
.
scrollTop
(
0
);
// Get current page summary chapters
$chapters
=
$
(
'
.book-summary .summary .chapter
'
)
.
filter
(
function
()
{
var
$link
=
$
(
this
).
children
(
'
a
'
),
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
);
});
}
}
function
isLeftClickEvent
(
e
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录