-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
124 lines (108 loc) · 3 KB
/
index.js
File metadata and controls
124 lines (108 loc) · 3 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
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
/*!
* tinyImageViewer.js v1.0.0
* (c) 2024-2024 JaxBBLL Liu
* Released under the MIT License.
*/
(function (global, factory) {
typeof exports === "object" && typeof module !== "undefined"
? (module.exports = factory())
: typeof define === "function" && define.amd
? define(factory)
: ((global = global || self), (global.tinyImageViewer = factory()));
})(this, function () {
"use strict";
function tinyImageViewer(config) {
var defaultConfig = {
zIndex: 99999,
space: 0,
close: function () {},
};
var config;
if (config instanceof HTMLImageElement) {
config = mergeObjects(defaultConfig, {
el: config,
});
} else {
config = mergeObjects(defaultConfig, config || {});
}
if (config.el instanceof HTMLImageElement) {
config.src = config.src || config.el.src;
}
var rect = config.el.getBoundingClientRect();
var mask = document.createElement("div");
addStyles(mask, {
position: "fixed",
backgroundColor: "rgba(0,0,0,0)",
zIndex: config.zIndex,
transition: "0.5s",
left: 0,
top: 0,
right: 0,
bottom: 0,
});
var maskImg = new Image();
maskImg.src = config.src;
mask.appendChild(maskImg);
setBaseStyle();
document.body.appendChild(mask);
setFirstPosition();
setLastPosition();
function setBaseStyle() {
addStyles(maskImg, {
position: "fixed",
maxWidth: "calc(100% - " + config.space * 2 + "px)",
maxHeight: "calc(100% - " + config.space * 2 + "px)",
transformOrigin: "0 0",
margin: "auto",
left: 0,
top: 0,
right: 0,
bottom: 0,
});
}
function setFirstPosition() {
var lastRect = maskImg.getBoundingClientRect();
var x = rect.left - lastRect.left;
var y = rect.top - lastRect.top;
var scale = rect.width / lastRect.width;
maskImg.style.transform =
"translate3d(" + x + "px, " + y + "px, 0) scale(" + scale + ")";
document.body.clientWidth;
}
function setLastPosition() {
mask.style.backgroundColor = "rgba(0,0,0,0.5)";
addStyles(maskImg, {
transition: "0.5s",
transform: "translate3d(0, 0, 0) scale(1)",
});
mask.addEventListener("click", function () {
mask.style.backgroundColor = "rgba(0,0,0,0)";
setFirstPosition();
mask.addEventListener("transitionend", function (e) {
if (mask.parentNode) {
mask.parentNode.removeChild(mask);
config.close();
}
});
});
}
}
function addStyles(o, props) {
for (var prop in props) {
o.style[prop] = props[prop];
}
}
function mergeObjects() {
var mergedObj = {};
for (var i = 0; i < arguments.length; i++) {
var obj = arguments[i];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
mergedObj[key] = obj[key];
}
}
}
return mergedObj;
}
return tinyImageViewer;
});