Skip to content

Commit 17270aa

Browse files
authored
Add Vue mastery Promotion Banner for Black Friday 2020 (#2733)
1 parent 202ee1b commit 17270aa

File tree

9 files changed

+428
-0
lines changed

9 files changed

+428
-0
lines changed

src/images/background.png

53.4 KB
Loading

src/images/black-hole.png

269 KB
Loading

src/images/logo-vuemastery.svg

Lines changed: 22 additions & 0 deletions
Loading

src/images/planets.png

40.1 KB
Loading

themes/vue/layout/layout.ejs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
<script type="text/javascript" defer="defer" src="https://extend.vimeocdn.com/ga/72160148.js"></script>
9191
</head>
9292
<body class="<%- isIndex ? '' : 'docs' -%>">
93+
<%- partial('partials/vuemastery_banner.ejs') %>
9394
<div id="mobile-bar" <%- isIndex ? 'class="top"' : '' %>>
9495
<a class="menu-button"></a>
9596
<a class="logo" href="/"></a>
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
<script src="https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"></script>
2+
<div id="vm-banner" class="vuemastery-banner hide" role="banner">
3+
<div class="vuemastery-planet"></div>
4+
<a class="vuemastery-banner--link" href="https://www.vuemastery.com/black-friday-2020" target="_blank">
5+
<img class="vuemastery-banner--logo" src="/images/logo-vuemastery.svg" alt="vuemastery" />
6+
<div class="vuemastery-banner--wrapper">
7+
<p><span>Vue Mastery's Black Friday Sale:</span>Save 50% off a year of Vue courses</p>
8+
<button class="vuemastery-button">Get discount</button>
9+
</div>
10+
</a>
11+
<div id="vm-close" class="vuemastery-banner--close"></div>
12+
</div>
13+
14+
<script>
15+
(function () {
16+
// Get elements
17+
var elBody = document.getElementsByTagName("body")[0];
18+
var elBanner = document.getElementById("vm-banner");
19+
var elClose = document.getElementById("vm-close");
20+
var elMenu = document.getElementById("mobile-bar");
21+
22+
// Variable names
23+
var nameWrapper = "vuemastery-promo";
24+
var nameFixMenu = "vuemastery-menu-fixed";
25+
var nameStorage = "vuemastery-black-firday-2020-banner";
26+
27+
// Defaults values
28+
var isMenuFixed = false;
29+
var posMenu = 80;
30+
31+
var initBanner = function () {
32+
// Add event listeners
33+
toggleBannerEvents(true);
34+
// Add class to the body to push fixed elements
35+
elBody.classList.add(nameWrapper);
36+
// Display the banner
37+
elBanner.style.display = "block";
38+
// Init close button action
39+
elClose.onclick = closeBanner;
40+
// Get the menu position
41+
getMenuPosition();
42+
// Check current page offset position
43+
isMenuFixed = isUnderBanner();
44+
// And position menu accordingly
45+
if (isMenuFixed) {
46+
elBody.classList.add("fixed");
47+
}
48+
}
49+
50+
var closeBanner = function(e) {
51+
// Prevent bubbling event that redirect to vuemastery.com
52+
e.preventDefault();
53+
// Remove events
54+
toggleBannerEvents(false);
55+
// Hide the banner
56+
elBanner.style.display = "none";
57+
// Remove class to the body that push fixed elements
58+
elBody.classList.remove(nameWrapper);
59+
// Save action in the local storage
60+
localStorage.setItem(nameStorage, true);
61+
}
62+
63+
var getMenuPosition = function() {
64+
posMenu = elBanner.clientHeight;
65+
}
66+
67+
var isUnderBanner = function() {
68+
return window.pageYOffset > posMenu;
69+
}
70+
71+
var fixMenuAfterBanner = function() {
72+
if (isUnderBanner()) {
73+
if (!isMenuFixed) {
74+
// The menu will be fixed
75+
toggleFixedPosition(true);
76+
}
77+
} else if (isMenuFixed) {
78+
// The menu stay under the banner
79+
toggleFixedPosition(false);
80+
}
81+
}
82+
83+
var toggleBannerEvents = function (on) {
84+
// Add or remove event listerners attached to the DOM
85+
var method = on ? "addEventListener" : "removeEventListener";
86+
window[method]("resize", getMenuPosition);
87+
window[method]("scroll", fixMenuAfterBanner);
88+
}
89+
90+
var toggleFixedPosition = function (on) {
91+
// Switch between relative and fixed position
92+
var method = on ? "add" : "remove";
93+
elBody.classList[method](nameFixMenu);
94+
isMenuFixed = on;
95+
}
96+
97+
// Load component according to user preferences
98+
if (!localStorage.getItem(nameStorage)) {
99+
initBanner();
100+
}
101+
})()
102+
</script>

0 commit comments

Comments
 (0)