forked from kucejan/obed.michalwiglasz.cz
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
112 lines (95 loc) · 3.14 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
$(function() {
var headings = $('h1');
var headingHeight = headings.outerHeight();
var bulgarianConstant = 4;
var current = null;
var panel = $('<h1>').attr('id', 'panel').css({
height: headingHeight,
display: "none",
});
panel.click(function() {
if (current) {
$('html, body').animate({
scrollTop: current.offset().top
}, "fast");
}
})
var span = $('<span>');
panel.append(span);
document.body.appendChild(panel[0]);
var panelHeight = panel.outerHeight();
var picker = $('<i id="panel-picker" class="fa fa-bars">').css({
height: panelHeight,
lineHeight: panelHeight + "px",
width: panelHeight,
});
document.body.appendChild(picker[0]);
var pickerMenu = $('<ul id="panel-picker-menu">').css({
top: panelHeight,
display: "none",
});
headings.each(function(index) {
var me = $(this);
var item = $('<li>').text(me.text());
item.data('target', me);
item.attr('class', me.attr('class'));
item.click(function() {
pickerMenu.hide();
$('html, body').animate({
scrollTop: $(this).data('target').offset().top
}, "fast");
})
pickerMenu.append(item);
});
document.body.appendChild(pickerMenu[0]);
picker.click(function() {
pickerMenu.toggle("fast");
})
$(document).click(function(event) {
if(!$(event.target).closest('#panel-picker').length) {
if($('#panel-picker-menu').is(":visible")) {
$('#panel-picker-menu').hide();
}
}
});
/*
var line = $('<div>').css({
height: "1px",
width: "100%",
background: "black",
zIndex: 10,
content: " ",
position: "absolute",
left: 0,
});
document.body.appendChild(line[0]);
*/
var scrollHandler = function() {
var windowTop = $(window).scrollTop();
headings.each(function(index) {
var me = $(this);
var h1top = me.offset().top;
if (h1top - bulgarianConstant <= windowTop) {
current = me;
}
//console.log(me.text(), "h1", h1top, "w", windowTop, "h-W", h1top - windowTop, "w+b", windowTop + bulgarianConstant);
//console.log(me.text(), h1top, "--->", h1top - bulgarianConstant, "<=", windowTop, h1top - bulgarianConstant <= windowTop);
});
if (current) {
var ul = current.nextUntil('h1').last();
var ending = ul.offset().top + ul.outerHeight();
var panelTop = ending - windowTop - panelHeight;
//line.css('top', ending);
//console.log(current.text(), ending, windowTop, panelTop);
span.html(current.html());
panel.attr('class', current.attr('class'));
panel.css('top', Math.min(0, panelTop));
//picker.css('top', Math.min(0, panelTop));
panel.show();
} else {
panel.hide();
}
};
scrollHandler();
$(window).on('scroll', scrollHandler);
});