improved lazy loading card images
This commit is contained in:
		
										
											
												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
											
										
									
								
							
							
								
								
									
										1
									
								
								web/themes/custom/materiotheme/assets/dist/vclb.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								web/themes/custom/materiotheme/assets/dist/vclb.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								web/themes/custom/materiotheme/assets/dist/vclb.css.gz
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								web/themes/custom/materiotheme/assets/dist/vclb.css.gz
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											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
 | 
			
		||||
        v-for="(img, index) in item.images"
 | 
			
		||||
        :key="img.url"
 | 
			
		||||
        class="lazy"
 | 
			
		||||
        v-lazy="index"
 | 
			
		||||
      >
 | 
			
		||||
        <img
 | 
			
		||||
          class="lazy"
 | 
			
		||||
          v-lazy="index"
 | 
			
		||||
          :data-src="img.style_cardmedium_url"
 | 
			
		||||
          :title="img.title"
 | 
			
		||||
        />
 | 
			
		||||
 
 | 
			
		||||
@@ -13,10 +13,10 @@
 | 
			
		||||
      <figure
 | 
			
		||||
        v-for="(img, index) in item.images"
 | 
			
		||||
        :key="img.url"
 | 
			
		||||
        class="lazy"
 | 
			
		||||
        v-lazy="index"
 | 
			
		||||
      >
 | 
			
		||||
        <img
 | 
			
		||||
          class="lazy"
 | 
			
		||||
          v-lazy="index"
 | 
			
		||||
          :data-src="img.style_cardmedium_url"
 | 
			
		||||
          :title="img.title"
 | 
			
		||||
        />
 | 
			
		||||
 
 | 
			
		||||
@@ -35,10 +35,10 @@
 | 
			
		||||
      <figure
 | 
			
		||||
        v-for="(img, index) in item.images"
 | 
			
		||||
        :key="img.url"
 | 
			
		||||
        v-lazy="index"
 | 
			
		||||
        class="lazy"
 | 
			
		||||
      >
 | 
			
		||||
        <img
 | 
			
		||||
          class="lazy"
 | 
			
		||||
          v-lazy="index"
 | 
			
		||||
          :data-src="img.style_minicard.url"
 | 
			
		||||
          :title="img.title"
 | 
			
		||||
        />
 | 
			
		||||
 
 | 
			
		||||
@@ -261,10 +261,10 @@
 | 
			
		||||
      <figure
 | 
			
		||||
        v-for="(img, index) in material.images"
 | 
			
		||||
        :key="img.url"
 | 
			
		||||
        class="lazy"
 | 
			
		||||
        v-lazy="index"
 | 
			
		||||
      >
 | 
			
		||||
        <img
 | 
			
		||||
          class="lazy"
 | 
			
		||||
          v-lazy="index"
 | 
			
		||||
          :data-src="img.style_cardfull.url"
 | 
			
		||||
          :title="img.title"
 | 
			
		||||
        />
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,25 @@
 | 
			
		||||
export default {
 | 
			
		||||
  directives: {
 | 
			
		||||
    lazy: {
 | 
			
		||||
      bind (img, binding) {
 | 
			
		||||
        // console.log('lazy bind', img, binding)
 | 
			
		||||
      bind (figure, binding) {
 | 
			
		||||
        // console.log('lazy bind', figure, binding)
 | 
			
		||||
        // show only the first image
 | 
			
		||||
        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.removeAttribute('data-src')
 | 
			
		||||
          img.classList.remove('lazy')
 | 
			
		||||
          // img.removeAttribute('data-src')
 | 
			
		||||
          // img.classList.remove('lazy')
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
@@ -16,7 +28,7 @@ export default {
 | 
			
		||||
      inserted (el, binding) {
 | 
			
		||||
        // switch images on mousemove
 | 
			
		||||
        el.addEventListener('mousemove', function (event) {
 | 
			
		||||
          const figs = this.querySelectorAll('figure')
 | 
			
		||||
          const figs = this.querySelectorAll('figure.loaded')
 | 
			
		||||
          // console.log('mousemove', this, event, figs.length)
 | 
			
		||||
          // let len = figs.length
 | 
			
		||||
          // let w = this.clientWidth;
 | 
			
		||||
@@ -45,34 +57,59 @@ export default {
 | 
			
		||||
    console.log('card mounted', this.$options.name)
 | 
			
		||||
    // if (this.$options.name ==! 'ModalCard') {
 | 
			
		||||
    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)
 | 
			
		||||
      imgs.forEach((img) => {
 | 
			
		||||
      figures.forEach((figure, index) => {
 | 
			
		||||
        const img = figure.querySelector('img:not(.blank)')
 | 
			
		||||
        // console.log('forEach img',img)
 | 
			
		||||
        img.setAttribute('src', img.getAttribute('data-src'))
 | 
			
		||||
        img.removeAttribute('data-src')
 | 
			
		||||
        img.classList.remove('lazy')
 | 
			
		||||
        img.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', 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 })
 | 
			
		||||
    // }
 | 
			
		||||
  },
 | 
			
		||||
  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)
 | 
			
		||||
  //   // },
 | 
			
		||||
  // }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user