-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathscript.js
135 lines (121 loc) · 3.69 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
popup = {
init: function () {
$("figure").click(function () {
popup.open($(this));
});
$(document)
.on("click", ".popup img", function () {
return false;
})
.on("click", ".popup", function () {
popup.close();
});
},
open: function ($figure) {
$(".gallery").addClass("pop");
$popup = $('<div class="popup" />').appendTo($("body"));
$fig = $figure.clone().appendTo($(".popup"));
$bg = $('<div class="bg" />').appendTo($(".popup"));
$close = $(
'<div class="close"><svg><use xlink:href="#close"></use></svg></div>'
).appendTo($fig);
$shadow = $('<div class="shadow" />').appendTo($fig);
src = $("img", $fig).attr("src");
$shadow.css({ backgroundImage: "url(" + src + ")" });
$bg.css({ backgroundImage: "url(" + src + ")" });
setTimeout(function () {
$(".popup").addClass("pop");
}, 10);
},
close: function () {
$(".gallery, .popup").removeClass("pop");
setTimeout(function () {
$(".popup").remove();
}, 100);
},
};
popup.init();
const chk = document.getElementById("chk");
chk.addEventListener("change", () => {
document.body.classList.toggle("dark");
});
// SOCIAL PANEL JS
const floating_btn = document.querySelector(".floating-btn");
const close_btn = document.querySelector(".close-btn");
const social_panel_container = document.querySelector(
".social-panel-container"
);
// floating_btn.addEventListener("click", () => {
// social_panel_container.classList.toggle("visible");
// });
// close_btn.addEventListener("click", () => {
// social_panel_container.classList.remove("visible");
// });
/*
using
- an animated gif of sparkles.
- an animated gradient as a holo effect.
- color-dodge mix blend mode
*/
/*
using
- an animated gif of sparkles.
- an animated gradient as a holo effect.
- color-dodge mix blend mode
*/
var x;
var $cards = $(".card");
var $style = $(".hover");
$cards
.on("mousemove touchmove", function(e) {
// normalise touch/mouse
var pos = [e.offsetX,e.offsetY];
e.preventDefault();
if ( e.type === "touchmove" ) {
pos = [ e.touches[0].clientX, e.touches[0].clientY ];
}
var $card = $(this);
// math for mouse position
var l = pos[0];
var t = pos[1];
var h = $card.height();
var w = $card.width();
var px = Math.abs(Math.floor(100 / w * l)-100);
var py = Math.abs(Math.floor(100 / h * t)-100);
var pa = (50-px)+(50-py);
// math for gradient / background positions
var lp = (50+(px - 50)/1.5);
var tp = (50+(py - 50)/1.5);
var px_spark = (50+(px - 50)/7);
var py_spark = (50+(py - 50)/7);
var p_opc = 20+(Math.abs(pa)*1.5);
var ty = ((tp - 50)/2) * -1;
var tx = ((lp - 50)/1.5) * .5;
// css to apply for active card
var grad_pos = `background-position: ${lp}% ${tp}%;`
var sprk_pos = `background-position: ${px_spark}% ${py_spark}%;`
var opc = `opacity: ${p_opc/100};`
var tf = `transform: rotateX(${ty}deg) rotateY(${tx}deg)`
// need to use a <style> tag for psuedo elements
var style = `
.card:hover:before { ${grad_pos} } /* gradient */
.card:hover:after { ${sprk_pos} ${opc} } /* sparkles */
`
// set / apply css class and style
$cards.removeClass("active");
$card.removeClass("animated");
$card.attr( "style", tf );
$style.html(style);
if ( e.type === "touchmove" ) {
return false;
}
clearTimeout(x);
}).on("mouseout touchend touchcancel", function() {
// remove css, apply custom animation on end
var $card = $(this);
$style.html("");
$card.removeAttr("style");
x = setTimeout(function() {
$card.addClass("animated");
},2500);
});