improved lazy loading card images
This commit is contained in:
parent
7876386208
commit
1f8ae09838
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -2864,3 +2864,10 @@ footer[role="contentinfo"]{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
img.lazy{
|
||||||
|
&.loading{
|
||||||
|
// background-color: red;
|
||||||
|
}
|
||||||
|
}
|
|
@ -66,10 +66,10 @@
|
||||||
<figure
|
<figure
|
||||||
v-for="(img, index) in item.images"
|
v-for="(img, index) in item.images"
|
||||||
:key="img.url"
|
:key="img.url"
|
||||||
|
class="lazy"
|
||||||
|
v-lazy="index"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="lazy"
|
|
||||||
v-lazy="index"
|
|
||||||
:data-src="img.style_cardmedium_url"
|
:data-src="img.style_cardmedium_url"
|
||||||
:title="img.title"
|
:title="img.title"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
<figure
|
<figure
|
||||||
v-for="(img, index) in item.images"
|
v-for="(img, index) in item.images"
|
||||||
:key="img.url"
|
:key="img.url"
|
||||||
|
class="lazy"
|
||||||
|
v-lazy="index"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="lazy"
|
|
||||||
v-lazy="index"
|
|
||||||
:data-src="img.style_cardmedium_url"
|
:data-src="img.style_cardmedium_url"
|
||||||
:title="img.title"
|
:title="img.title"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -35,10 +35,10 @@
|
||||||
<figure
|
<figure
|
||||||
v-for="(img, index) in item.images"
|
v-for="(img, index) in item.images"
|
||||||
:key="img.url"
|
:key="img.url"
|
||||||
|
v-lazy="index"
|
||||||
|
class="lazy"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="lazy"
|
|
||||||
v-lazy="index"
|
|
||||||
:data-src="img.style_minicard.url"
|
:data-src="img.style_minicard.url"
|
||||||
:title="img.title"
|
:title="img.title"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -261,10 +261,10 @@
|
||||||
<figure
|
<figure
|
||||||
v-for="(img, index) in material.images"
|
v-for="(img, index) in material.images"
|
||||||
:key="img.url"
|
:key="img.url"
|
||||||
|
class="lazy"
|
||||||
|
v-lazy="index"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="lazy"
|
|
||||||
v-lazy="index"
|
|
||||||
:data-src="img.style_cardfull.url"
|
:data-src="img.style_cardfull.url"
|
||||||
:title="img.title"
|
:title="img.title"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -2,13 +2,25 @@
|
||||||
export default {
|
export default {
|
||||||
directives: {
|
directives: {
|
||||||
lazy: {
|
lazy: {
|
||||||
bind (img, binding) {
|
bind (figure, binding) {
|
||||||
// console.log('lazy bind', img, binding)
|
// console.log('lazy bind', figure, binding)
|
||||||
// show only the first image
|
// show only the first image
|
||||||
if (binding.value === 0) {
|
if (binding.value === 0) {
|
||||||
|
const img = figure.querySelector('img:not(.blank)')
|
||||||
|
figure.classList.add('loading')
|
||||||
|
img.addEventListener('load', function (e) {
|
||||||
|
console.log('img loaded', e)
|
||||||
|
figure.classList.remove('loading')
|
||||||
|
figure.classList.add('loaded')
|
||||||
|
})
|
||||||
|
img.addEventListener('error', function (e) {
|
||||||
|
console.error('img ERROR', e)
|
||||||
|
e.target.classList.remove('loading')
|
||||||
|
e.target.classList.add('error')
|
||||||
|
})
|
||||||
img.setAttribute('src', img.getAttribute('data-src'))
|
img.setAttribute('src', img.getAttribute('data-src'))
|
||||||
img.removeAttribute('data-src')
|
// img.removeAttribute('data-src')
|
||||||
img.classList.remove('lazy')
|
// img.classList.remove('lazy')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -16,7 +28,7 @@ export default {
|
||||||
inserted (el, binding) {
|
inserted (el, binding) {
|
||||||
// switch images on mousemove
|
// switch images on mousemove
|
||||||
el.addEventListener('mousemove', function (event) {
|
el.addEventListener('mousemove', function (event) {
|
||||||
const figs = this.querySelectorAll('figure')
|
const figs = this.querySelectorAll('figure.loaded')
|
||||||
// console.log('mousemove', this, event, figs.length)
|
// console.log('mousemove', this, event, figs.length)
|
||||||
// let len = figs.length
|
// let len = figs.length
|
||||||
// let w = this.clientWidth;
|
// let w = this.clientWidth;
|
||||||
|
@ -45,34 +57,59 @@ export default {
|
||||||
console.log('card mounted', this.$options.name)
|
console.log('card mounted', this.$options.name)
|
||||||
// if (this.$options.name ==! 'ModalCard') {
|
// if (this.$options.name ==! 'ModalCard') {
|
||||||
this.$el.addEventListener('mouseover', function (event) {
|
this.$el.addEventListener('mouseover', function (event) {
|
||||||
const imgs = this.querySelectorAll('.images figure img.lazy')
|
const figures = this.querySelectorAll('.images figure.lazy:not(.loaded):not(.loading)')
|
||||||
// console.log('mousemove', this, imgs)
|
// console.log('mousemove', this, imgs)
|
||||||
imgs.forEach((img) => {
|
figures.forEach((figure, index) => {
|
||||||
|
const img = figure.querySelector('img:not(.blank)')
|
||||||
// console.log('forEach img',img)
|
// console.log('forEach img',img)
|
||||||
img.setAttribute('src', img.getAttribute('data-src'))
|
img.classList.add('loading')
|
||||||
img.removeAttribute('data-src')
|
img.addEventListener('load', function (e) {
|
||||||
img.classList.remove('lazy')
|
// console.log('img loaded', e)
|
||||||
|
figure.classList.remove('loading')
|
||||||
|
figure.classList.add('loaded')
|
||||||
|
})
|
||||||
|
img.addEventListener('error', function (e) {
|
||||||
|
console.error('img ERROR', figure, e)
|
||||||
|
})
|
||||||
|
const src = img.getAttribute('data-src')
|
||||||
|
|
||||||
|
// for debug purpose
|
||||||
|
console.log(figures.length, index)
|
||||||
|
// let src = img.getAttribute('data-src')
|
||||||
|
// if (index > 0 && index < figures.length - 1) {
|
||||||
|
// src = img.getAttribute('data-src').replace('?', '/bad?')
|
||||||
|
// }
|
||||||
|
|
||||||
|
img.setAttribute('src', src)
|
||||||
|
// img.removeAttribute('data-src')
|
||||||
|
// img.classList.remove('lazy')
|
||||||
})
|
})
|
||||||
}, { once: true })
|
}, { once: true })
|
||||||
// }
|
// }
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
activateLazyLoad () {
|
|
||||||
console.log('card activateLazyLoad', this.$options.name)
|
|
||||||
|
|
||||||
this.$el.addEventListener('mousemove', function (event) {
|
|
||||||
const imgs = this.querySelectorAll('.images figure img.lazy')
|
|
||||||
// console.log('mousemove', this, imgs)
|
|
||||||
imgs.forEach((img) => {
|
|
||||||
// console.log('forEach img',img)
|
|
||||||
img.setAttribute('src', img.getAttribute('data-src'))
|
|
||||||
img.removeAttribute('data-src')
|
|
||||||
img.classList.remove('lazy')
|
|
||||||
})
|
|
||||||
}, { once: true })
|
|
||||||
}
|
|
||||||
// deg2rad (deg) {
|
|
||||||
// return deg * (Math.PI / 180)
|
|
||||||
// },
|
|
||||||
}
|
}
|
||||||
|
// ,
|
||||||
|
// methods: {
|
||||||
|
// // not used
|
||||||
|
// activateLazyLoad () {
|
||||||
|
// console.log('card activateLazyLoad', this.$options.name)
|
||||||
|
|
||||||
|
// this.$el.addEventListener('mousemove', function (event) {
|
||||||
|
// const imgs = this.querySelectorAll('.images figure img.lazy')
|
||||||
|
// // console.log('mousemove', this, imgs)
|
||||||
|
// imgs.forEach((img) => {
|
||||||
|
// // console.log('forEach img',img)
|
||||||
|
// // img.classList.add('loading')
|
||||||
|
// // img.onload = function (e) {
|
||||||
|
// // console.log('img loaded', e)
|
||||||
|
// // }
|
||||||
|
// img.setAttribute('src', img.getAttribute('data-src'))
|
||||||
|
// img.removeAttribute('data-src')
|
||||||
|
// img.classList.remove('lazy')
|
||||||
|
// })
|
||||||
|
// }, { once: true })
|
||||||
|
// }
|
||||||
|
// // deg2rad (deg) {
|
||||||
|
// // return deg * (Math.PI / 180)
|
||||||
|
// // },
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue