-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathapp.js
More file actions
75 lines (75 loc) · 3.19 KB
/
app.js
File metadata and controls
75 lines (75 loc) · 3.19 KB
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
// -----------elements-----------
let blurFilter = document.querySelector("#blur");
let contrastFilter = document.querySelector("#contrast");
let hueFilter = document.querySelector("#hue");
let GrayScaleFilter = document.querySelector("#GrayScale");
let sepiaFilter = document.querySelector("#sepia");
let opacityFilter = document.querySelector("#opacity");
let invertFilter = document.querySelector("#invert");
let saturateFilter = document.querySelector("#saturate");
let brightnessFilter = document.querySelector("#brightness");
let noFlipBtn = document.querySelector("#noFlip");
let flipXBtn = document.querySelector("#flipX");
let flipYBtn = document.querySelector("#flipY");
let resetBtn = document.querySelector(".reset");
let uploadBtn = document.querySelector("#upload");
let downloadBtn = document.querySelector(".download");
let choosenImg = document.querySelector(".choosenImg");
let imgBox = document.querySelector(".img-container");
let sliderInputs = document.querySelectorAll(".slider-inputs");
// -----------applying styles-----------
sliderInputs.forEach((item) => {
item.addEventListener("input", function (e) {
let allFilters = `grayscale(${GrayScaleFilter.value}%) blur(${blurFilter.value}px) sepia(${sepiaFilter.value}) saturate(${saturateFilter.value}) opacity(${opacityFilter.value}) brightness(${brightnessFilter.value}%) contrast(${contrastFilter.value}%) hue-rotate(${hueFilter.value}deg) invert(${invertFilter.value}%)`;
choosenImg.style.filter = allFilters;
});
resetBtn.addEventListener("click", function (e) {
// -----------reset img styles-----------
let resetImgStyles = `grayscale(0%) blur(0px) sepia(0) saturate(1) opacity(1) brightness(100%) contrast(100%) hue-rotate(0deg) invert(0%)`;
choosenImg.style.filter = resetImgStyles;
// -----------reset input values-----------
GrayScaleFilter.value = 0;
blurFilter.value = 0;
sepiaFilter.value = 0;
saturateFilter.value = 1;
opacityFilter.value = 1;
brightnessFilter.value = 100;
contrastFilter.value = 100;
hueFilter.value = 0;
invertFilter.value = 0;
console.log(GrayScaleFilter.value);
// -----------flip reset-----------
(noFlipBtn.checked = true), (choosenImg.style.transform = "none");
});
});
// -----------zoom effect-----------
imgBox.addEventListener("mousemove", onZoom);
imgBox.addEventListener("mouseover", onZoom);
imgBox.addEventListener("mouseleave", offZoom);
function onZoom(e) {
const x = e.clientX - e.target.offsetLeft;
const y = e.clientY - e.target.offsetTop;
choosenImg.style.transformOrigin = `${x}px ${y}px`;
choosenImg.style.transform = "scale(2)";
}
function offZoom(e) {
choosenImg.style.transformOrigin = `center center`;
choosenImg.style.transform = "scale(1)";
}
// -----------upload image-----------
uploadBtn.addEventListener("change", function (e) {
choosenImg.src = URL.createObjectURL(e.target.files[0]);
});
// -----------flip buttons-----------
// flip x
flipXBtn.addEventListener("click", () => {
choosenImg.style.transform = "scaleX(-1)";
});
// flip y
flipYBtn.addEventListener("click", () => {
choosenImg.style.transform = "scaleY(-1)";
});
// no flip
noFlipBtn.addEventListener("click", () => {
choosenImg.style.transform = "none";
});