Ensure images don't get stuck on opacity 0
This commit is contained in:
10
js/image.js
10
js/image.js
@@ -3,16 +3,20 @@ export default class Image {
|
|||||||
this.image = image;
|
this.image = image;
|
||||||
}
|
}
|
||||||
|
|
||||||
showImage() {
|
fadeIn() {
|
||||||
this.image.style.opacity = 1;
|
this.image.style.opacity = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fadeIn() {
|
start() {
|
||||||
this.image.style.opacity = 0;
|
this.image.style.opacity = 0;
|
||||||
|
if (this.image.complete) {
|
||||||
|
this.fadeIn();
|
||||||
|
} else {
|
||||||
this.attachLoadedEvent();
|
this.attachLoadedEvent();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
attachLoadedEvent() {
|
attachLoadedEvent() {
|
||||||
this.image.addEventListener('load', () => this.showImage());
|
this.image.addEventListener('load', () => this.fadeIn());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,16 +20,38 @@ describe('Image', () => {
|
|||||||
expect(img.image).toBe(image);
|
expect(img.image).toBe(image);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('fadeIn should set the element opacity to 0', () => {
|
test('fadeIn should set the element opacity to 1', () => {
|
||||||
const img = new Image(image);
|
const img = new Image(image);
|
||||||
img.fadeIn();
|
img.fadeIn();
|
||||||
|
expect(img.image.style.opacity).toBe('1');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('start should set the element opacity to 0', () => {
|
||||||
|
const img = new Image(image);
|
||||||
|
img.start();
|
||||||
expect(img.image.style.opacity).toBe('0');
|
expect(img.image.style.opacity).toBe('0');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('showImage should set the element opacity to 1', () => {
|
test('start should call fadeIn when image has already loaded', () => {
|
||||||
const img = new Image(image);
|
const img = new Image(image);
|
||||||
img.showImage();
|
img.fadeIn = jest.fn();
|
||||||
expect(img.image.style.opacity).toBe('1');
|
Object.defineProperty(img.image, 'complete', {
|
||||||
|
value: true,
|
||||||
|
writable: false,
|
||||||
|
});
|
||||||
|
img.start();
|
||||||
|
expect(img.fadeIn).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('start should call attachLoadedEvent if image has not yet loaded', () => {
|
||||||
|
const img = new Image(image);
|
||||||
|
img.attachLoadedEvent = jest.fn();
|
||||||
|
Object.defineProperty(img.image, 'complete', {
|
||||||
|
value: false,
|
||||||
|
writable: false,
|
||||||
|
});
|
||||||
|
img.start();
|
||||||
|
expect(img.attachLoadedEvent).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const windy = {
|
|||||||
export default function init() {
|
export default function init() {
|
||||||
document.querySelectorAll('img').forEach((image) => {
|
document.querySelectorAll('img').forEach((image) => {
|
||||||
const img = new Image(image);
|
const img = new Image(image);
|
||||||
img.fadeIn();
|
img.start();
|
||||||
windy.images.push(img);
|
windy.images.push(img);
|
||||||
});
|
});
|
||||||
windy.menu = new Menu({
|
windy.menu = new Menu({
|
||||||
|
|||||||
Reference in New Issue
Block a user