Ensure images don't get stuck on opacity 0

This commit is contained in:
2018-04-29 18:06:36 +01:00
parent 2fbf3b552f
commit c93b9af4b1
3 changed files with 35 additions and 9 deletions

View File

@@ -3,16 +3,20 @@ export default class Image {
this.image = image;
}
showImage() {
fadeIn() {
this.image.style.opacity = 1;
}
fadeIn() {
start() {
this.image.style.opacity = 0;
this.attachLoadedEvent();
if (this.image.complete) {
this.fadeIn();
} else {
this.attachLoadedEvent();
}
}
attachLoadedEvent() {
this.image.addEventListener('load', () => this.showImage());
this.image.addEventListener('load', () => this.fadeIn());
}
}

View File

@@ -20,16 +20,38 @@ describe('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);
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');
});
test('showImage should set the element opacity to 1', () => {
test('start should call fadeIn when image has already loaded', () => {
const img = new Image(image);
img.showImage();
expect(img.image.style.opacity).toBe('1');
img.fadeIn = jest.fn();
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);
});
});

View File

@@ -9,7 +9,7 @@ const windy = {
export default function init() {
document.querySelectorAll('img').forEach((image) => {
const img = new Image(image);
img.fadeIn();
img.start();
windy.images.push(img);
});
windy.menu = new Menu({