-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathb7-gallery.js
405 lines (354 loc) · 45.6 KB
/
b7-gallery.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
import { PolymerElement } from '@polymer/polymer/polymer-element';
import '@polymer/iron-icons';
import '@polymer/paper-icon-button';
import '@polymer/iron-image';
import { html } from '@polymer/polymer/lib/utils/html-tag';
/**
* # b7-gallery
* The `<b7-gallery>` element is a CSS selector-based image gallery.
*
* ## Features
* * Fullscreen/Viewport mode
* * Customizable buttons, and loadding animation
* * Progressive image loading
* * Fancy animations
*
* ## Usage
* In typical use, place `<b7-gallery>` anywhere in your html, and specify
* a selector for the target elements, that should trigger the gallery:
* <body>
* <b7-gallery trigger-selector='img'></b7-gallery>
* <img src="https://picsum.photos/100/100?image=10"
* data-url="https://picsum.photos/1920/1080?image=10"/>
* ...
*
* @customElement
* @polymer
* @demo demo/index.html
*/
class B7Gallery extends PolymerElement {
static get template() {
return html`
<style>
:host {
display: none;
color: white;
--iron-image-placeholder: {
background-size: auto!important;
background-repeat: no-repeat;
background-position: center center;
}
--iron-icon: {
filter: drop-shadow(0 0 .1em #000);
opacity: 0.8;
}
}
#stage {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 2400;
/*display: none;*/
background-color: black;
user-select: none;
}
.slide {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
max-width: 100%;
max-height: 100%;
margin: auto;
}
slot[name=close]::slotted(*), slot[name=close] > * {
position: absolute;
top: .1em;
right: .1em;
}
slot.chevron::slotted(*), paper-icon-button.chevron {
position: absolute;
top: 50%;
margin-top: -2em;
height: 4em;
width: 4em;
transition: opacity 0.25s ease-in-out;
}
slot.chevron[name=right]::slotted(*), paper-icon-button.chevron.right {
right: 0;
}
slot.chevron[name=left]::slotted(*), paper-icon-button.chevron.left {
left: 0;
}
.toolbar {
position: fixed;
top: 0;
right: 0;
left: 0;
z-index: 2400;
height: 3em;
transform: translateY(-100%);
transition: transform 0.25s ease-in-out 0.05s;
visibility: hidden;
will-change: transform;
}
.toolbar[visible] {
transform: translateY(0);
visibility: visible;
}
</style>
<div tabindex="-1" id="stage">
<iron-image id="slide" class="slide" preload="" fade="" sizing="contain" placeholder="[[ placeholder ]]">
</iron-image>
<iron-image id="exitSlide" class="slide" preload="" fade="" sizing="contain" placeholder="[[ placeholder ]]">
</iron-image>
<slot name="left" class="chevron" on-tap="previous">
<paper-icon-button class="chevron left" icon="icons:chevron-left"></paper-icon-button>
</slot>
<slot name="right" class="chevron" on-tap="next">
<paper-icon-button class="chevron right" icon="icons:chevron-right"></paper-icon-button>
</slot>
</div>
<div class="toolbar" visible="">
<slot name="close" on-tap="close">
<paper-icon-button icon="icons:close"></paper-icon-button>
</slot>
</div>
`;
}
static get is() { return 'b7-gallery'; }
static get properties() {
return {
/**
* Indicates whether the gallery is currently open.
*/
open: {
type: Boolean,
value: false,
readonly: true
},
/**
* You may specify a custom CSS selector that selects the target
* elements that should trigger the gallery. The target elements
* should have a `data-url` attribute defined, pointing to the
* full-scale image to be loaded by the gallery.
*/
triggerSelector: {
type: String,
value: '.trigger-gallery'
},
/**
* Specifies whether the gallery should open in fullscreen mode. If
* the fullscreen access was not granted, the gallery will fall back
* to occupy the full viewport area.
*/
fullscreen: {
type: Boolean,
value: false
},
/**
* The attribute of the trigger element to use as the URL to load
* the full-scale image from.
*/
urlAttribute: {
type: String,
value: 'href'
},
/**
* You may specify a URL for the placeholder image to be displayed
* while the full-scale image is loaded. It is recommended to specify
* the placefolder as a data URI, since it is loaded instantly.
*/
placeholder: {
type: String,
value: 'data:;base64,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'
},
/**
* A list of the target elements.
*
* @type NodeList
*/
_targetElements: NodeList,
/**
* The index of the currently displayed element in the
*`_targetElements` list.
*/
_currentIndex: Number
};
}
constructor()
{
super();
this._active_key_press_handler = this._handleKeyPress.bind(this);
this._animating = false;
}
connectedCallback()
{
super.connectedCallback();
this._targetElements = document.querySelectorAll(this.triggerSelector);
let target = null;
this._targetElements.forEach(item => item.addEventListener('click', event => {
event.preventDefault();
target = event.currentTarget;
if (!this.fullscreen || !this._requestFullScreen()) {
this._finishOpen(target);
}
}));
document.addEventListener('webkitfullscreenchange', ev => {
if (document.webkitFullscreenElement == null) {
this._finishClose();
} else {
this._finishOpen(target);
}
});
this._entryAnimation = this.$.slide.animate(
{ opacity: [0, 1] },
{
duration: 250,
easing: 'cubic-bezier(0.42, 0, 0.58, 1)',
fill: 'both'
}
);
this._entryAnimation.pause();
this._animationTiming = {
duration: 250,
easing: 'cubic-bezier(0.42, 0, 0.58, 1)'
};
this._exitLeftAnimation = this.$.exitSlide.animate(
{
opacity: [1, 0],
transform: ['translateX(0)', 'translateX(-10%)']
},
this._animationTiming
);
this._exitLeftAnimation.pause();
this._exitRightAnimation = this.$.exitSlide.animate(
{
opacity: [1, 0],
transform: ['translateX(0)', `translateX(10%)`]
},
this._animationTiming
);
this._exitRightAnimation.pause();
/*
var start_event = null;
this.addEventListener('touchstart', (event) => {
start_event = event;
this._entryAnimation.playbackRate = 0;
this._exitLeftAnimation.playbackRate = 0;
this._exitRightAnimation.playbackRate = 0;
});
this.addEventListener('touchend', (event) => {
this._entryAnimation.playbackRate = 1;
this._exitLeftAnimation.playbackRate = 1;
this._exitRightAnimation.playbackRate = 1;
});
this.addEventListener('touchcancel', (event) => {
start_event = null;
});
this.addEventListener('touchmove', (event) => {
if (!start_event) return;
let delta = start_event.touches[0].screenX - event.changedTouches[0].screenX;
if (delta > 0) {
this._entryAnimation.currentTime = delta;
this._exitLeftAnimation.currentTime = delta;
} else {
this._entryAnimation.currentTime = -delta;
this._exitRightAnimation.currentTime = -delta;
}
console.log(this._entryAnimation.currentTime);
});
*/
}
open()
{
this._finishOpen(this._targetElements[this._currentIndex]);
}
_finishOpen(target)
{
this._currentIndex = Array.prototype.indexOf.call(this._targetElements, target);
this.style.display = 'block';
this._page(0);
document.addEventListener('keydown', this._active_key_press_handler);
}
close()
{
this._exitFullScreen();
this._finishClose();
}
_finishClose()
{
this.style.display = 'none';
document.removeEventListener('keydown', this._active_key_press_handler);
}
next()
{
this._page(1);
}
previous()
{
this._page(-1);
}
_handleKeyPress(event) {
switch (event.code) {
case "Space": case "ArrowRight": case "KeyD":
this.next();
break;
case "ArrowLeft": case "KeyA":
this.previous();
break;
case "Escape":
this.close();
break;
default:
break;
}
}
_page(step)
{
if (this._animating) return;
let nextItem = this._targetElements[this._currentIndex + step];
if (!nextItem) return;
this.$.exitSlide.src = this.$.slide.src;
this.$.slide.src = nextItem.getAttribute(this.urlAttribute);
//document.removeEventListener('keydown', this._handleKeyPress.bind(this));
this._animating = true;
this._entryAnimation.play();
let animation_cleanup = () => {
this.$.exitSlide.style.display = 'none';
let preloadItem = this._targetElements[this._currentIndex + step];
if (preloadItem) this.$.exitSlide.src = preloadItem.getAttribute(this.urlAttribute);
this._animating = false;
//document.addEventListener('keydown', this._handleKeyPress.bind(this));
};
this.$.exitSlide.style.display = 'block';
if (step > 0) {
this._exitLeftAnimation.play();
this._exitLeftAnimation.onfinish = animation_cleanup;
} else if (step < 0) {
this._exitRightAnimation.play();
this._exitRightAnimation.onfinish = animation_cleanup;
} else {
animation_cleanup();
}
this._currentIndex += step;
}
_requestFullScreen()
{
return this.requestFullScreen && this.requestFullScreen() ||
this.webkitRequestFullScreen && this.webkitRequestFullScreen() ||
this.mozRequestFullScreen && this.mozRequestFullScreen() ||
this.msRequestFullScreen && this.msRequestFullScreen();
}
_exitFullScreen()
{
try {
document.exitFullscreen && document.exitFullscreen();
} catch (error) {
}
}
}
window.customElements.define(B7Gallery.is, B7Gallery);