Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
大大大太阳yt
driver.js
提交
095d0ef4
D
driver.js
项目概览
大大大太阳yt
/
driver.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
driver.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
095d0ef4
编写于
3月 10, 2018
作者:
K
Kamran Ahmed
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Bring element to view if not in view
上级
28c1a4b8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
56 addition
and
7 deletion
+56
-7
assets/scripts/src/element.js
assets/scripts/src/element.js
+42
-5
assets/scripts/src/sholo.js
assets/scripts/src/sholo.js
+12
-2
index.html
index.html
+2
-0
未找到文件。
assets/scripts/src/element.js
浏览文件 @
095d0ef4
...
...
@@ -34,6 +34,40 @@ export default class Element {
return
{
x
,
y
};
}
isInView
()
{
let
top
=
this
.
node
.
offsetTop
;
let
left
=
this
.
node
.
offsetLeft
;
const
width
=
this
.
node
.
offsetWidth
;
const
height
=
this
.
node
.
offsetHeight
;
let
el
=
this
.
node
;
while
(
el
.
offsetParent
)
{
el
=
el
.
offsetParent
;
top
+=
el
.
offsetTop
;
left
+=
el
.
offsetLeft
;
}
return
(
top
>=
this
.
window
.
pageYOffset
&&
left
>=
this
.
window
.
pageXOffset
&&
(
top
+
height
)
<=
(
this
.
window
.
pageYOffset
+
this
.
window
.
innerHeight
)
&&
(
left
+
width
)
<=
(
this
.
window
.
pageXOffset
+
this
.
window
.
innerWidth
)
);
}
bringInView
()
{
if
(
this
.
isInView
())
{
return
;
}
const
elementRect
=
this
.
getCalculatedPosition
();
const
absoluteElementTop
=
elementRect
.
top
+
window
.
pageYOffset
;
const
middle
=
absoluteElementTop
-
(
window
.
innerHeight
/
2
);
window
.
scrollTo
(
0
,
middle
);
}
/**
* Gets the calculated position on screen, around which
* we need to draw
...
...
@@ -82,17 +116,17 @@ export default class Element {
const
popoverTip
=
this
.
popover
.
querySelector
(
'
.sholo-popover-tip
'
);
const
documentHeight
=
this
.
getDocumentHeight
()
;
const
pageHeight
=
this
.
getFullPageSize
().
height
;
const
popoverHeight
=
this
.
getPopoverHeight
();
const
popoverMargin
=
this
.
options
.
padding
+
10
;
this
.
popover
.
style
.
left
=
`
${
position
.
left
-
this
.
options
.
padding
}
px`
;
// Calculate different dimensions after attaching popover
const
document
HeightAfterPopOver
=
position
.
bottom
+
popoverHeight
+
popoverMargin
;
const
page
HeightAfterPopOver
=
position
.
bottom
+
popoverHeight
+
popoverMargin
;
// If adding popover would go out of the window height, then show it to the top
if
(
documentHeightAfterPopOver
>=
document
Height
)
{
if
(
pageHeightAfterPopOver
>=
page
Height
)
{
this
.
popover
.
style
.
top
=
`
${
position
.
top
-
popoverHeight
-
popoverMargin
}
px`
;
popoverTip
.
classList
.
add
(
'
bottom
'
);
}
else
{
...
...
@@ -113,12 +147,15 @@ export default class Element {
this
.
popover
.
style
.
display
=
'
none
'
;
}
get
DocumentHeight
()
{
get
FullPageSize
()
{
// eslint-disable-next-line prefer-destructuring
const
body
=
this
.
document
.
body
;
const
html
=
this
.
document
.
documentElement
;
return
Math
.
max
(
body
.
scrollHeight
,
body
.
offsetHeight
,
html
.
clientHeight
,
html
.
scrollHeight
,
html
.
offsetHeight
);
return
{
height
:
Math
.
max
(
body
.
scrollHeight
,
body
.
offsetHeight
,
html
.
scrollHeight
,
html
.
offsetHeight
),
width
:
Math
.
max
(
body
.
scrollWidth
,
body
.
offsetWidth
,
html
.
scrollWidth
,
html
.
offsetWidth
),
};
}
getPopoverHeight
()
{
...
...
assets/scripts/src/sholo.js
浏览文件 @
095d0ef4
...
...
@@ -72,12 +72,22 @@ export default class Sholo {
const
prevClicked
=
e
.
target
.
classList
.
contains
(
'
sholo-prev-btn
'
);
const
closeClicked
=
e
.
target
.
classList
.
contains
(
'
sholo-close-btn
'
);
if
(
closeClicked
)
{
this
.
reset
();
return
;
}
if
(
nextClicked
)
{
this
.
moveNext
();
}
else
if
(
prevClicked
)
{
this
.
movePrevious
();
}
else
if
(
closeClicked
)
{
this
.
reset
();
}
// @todo - move to onHighlighted hook and add the check if not visible then do this
if
(
this
.
overlay
.
highlightedElement
)
{
window
.
setTimeout
(()
=>
{
this
.
overlay
.
highlightedElement
.
bringInView
();
},
800
);
}
}
...
...
index.html
浏览文件 @
095d0ef4
...
...
@@ -77,6 +77,8 @@
sholo
.
defineSteps
([
{
element
:
'
.section__header
'
},
{
element
:
'
.section__how
'
},
{
element
:
'
.section__purpose
'
},
{
element
:
'
.section__examples
'
},
{
element
:
'
.section__contributing
'
},
]);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录