-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhideHeader.js
83 lines (72 loc) · 2.99 KB
/
hideHeader.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
/**
* manchakkay - Hide Header on scroll
*
* Usage: hideHeader.init(timeout, selector, height, height_func)
* timeout(ms), selector(str), height(int+px), height_func(eval_str_func+px)
*/
var hideHeader = {
data: {
settings: {
timeout: 0,
selector: ".header__wrapper",
height: "auto",
height_func: 'getComputedStyle(document.querySelector("html")).getPropertyValue("--cell")',
},
scroll: {
prev: 0,
now: 0,
},
timer: null,
header: null,
height_value: null,
},
init: function (timeout, selector, height, height_func) {
// Initialize variables
hideHeader.data.scroll.prev = window.pageYOffset;
hideHeader.data.timer = null;
// Initialize event listeners
document.addEventListener('scroll', hideHeader.handle);
document.addEventListener('resize', hideHeader.handle);
// Setting values
if (timeout != undefined && timeout != null && !isNaN(timeout))
hideHeader.data.settings.timeout = timeout;
if (selector != undefined && selector != null)
hideHeader.data.settings.selector = selector.toString();
if (height != undefined && height != null)
hideHeader.data.settings.height = height;
if (height == "auto" && height_func != undefined && height_func != null)
hideHeader.data.settings.height_func = height_func;
},
handle: function () {
// Update pos and header object
hideHeader.data.scroll.now = window.pageYOffset;
hideHeader.data.header = document.querySelector(hideHeader.data.settings.selector);
hideHeader.data.header.style.transition = "top 0.6s ease-in-out";
// Checking header object and scroll position
if ((hideHeader.data.header != undefined && hideHeader.data.header != null && hideHeader.data.scroll.prev > hideHeader.data.scroll.now && hideHeader.data.scroll.prev > 0) || (hideHeader.data.scroll.now == 0)) {
hideHeader.show();
} else {
hideHeader.hide();
// Checking timeout definition
if (!isNaN(hideHeader.data.settings.timeout) && hideHeader.data.settings.timeout > 0) {
// Restart timeout
clearTimeout(hideHeader.data.timer);
hideHeader.data.timer = setTimeout(hideHeader.show, hideHeader.data.settings.timeout);
}
}
hideHeader.data.scroll.prev = hideHeader.data.scroll.now;
},
show: function () {
// Show header
hideHeader.data.header.style.top = "0";
},
hide: function () {
// Hide header
if (hideHeader.data.settings.height == "auto") {
hideHeader.data.height_value = eval(hideHeader.data.settings.height_func);
} else {
hideHeader.data.height_value = hideHeader.data.settings.height;
}
hideHeader.data.header.style.top = "-" + hideHeader.data.height_value;
}
}