@@ -31,7 +31,7 @@ <h2>Events</h2>
3131        < section  class ="bottom-margin "> 
3232          < div > 
3333            < a  href ="images/events/2024_7th_workshop_group_photo_ORIGINAL.jpg " target ="_blank "> 
34-               < img  class ="image " src ="images/events/2024_7th_workshop_group_photo.jpg " alt ="Workshop Group Photo " /> 
34+               < img  class ="image " src ="images/events/2024_7th_workshop_group_photo_thumb.jpg  "  data-src =" images/events/ 2024_7th_workshop_group_photo.jpgalt ="Workshop Group Photo "  loading =" lazy " /> 
3535            </ a > 
3636          </ div > 
3737          < div > 
@@ -47,7 +47,7 @@ <h5>30 September - 4 October 2024 @ San Diego Supercomputer Center, US</h5>
4747        < section  class ="bottom-margin "> 
4848          < div > 
4949            < a  href ="images/events/2023_Dirac_RucioWS_groupphoto_ORIGINAL.jpg " target ="_blank "> 
50-               < img  class ="image " src ="images/events/2023_Dirac_RucioWS_groupphoto.jpg " alt ="Workshop Group Photo " /> 
50+               < img  class ="image " src ="images/events/2023_Dirac_RucioWS_groupphoto_thumb.jpg  "  data-src =" images/events/ 2023_Dirac_RucioWS_groupphoto.jpgalt ="Workshop Group Photo "  loading =" lazy " /> 
5151            </ a > 
5252          </ div > 
5353          < div > 
@@ -64,7 +64,7 @@ <h5>16 October - 20 October 2023 @ KEK, Tsukuba, JP</h5>
6464        < section  class ="bottom-margin "> 
6565          < div > 
6666            < a  href ="images/events/2022_5th_workshop_group_photo_ORIGINAL.jpg " target ="_blank "> 
67-               < img  class ="image " src ="images/events/2022_5th_workshop_group_photo.jpg " alt ="Workshop Group Photo " /> 
67+               < img  class ="image " src ="images/events/2022_5th_workshop_group_photo_thumb.jpg  "  data-src =" images/events/ 2022_5th_workshop_group_photo.jpgalt ="Workshop Group Photo "  loading =" lazy " /> 
6868            </ a > 
6969          </ div > 
7070          < div > 
@@ -81,7 +81,7 @@ <h5>10 November - 11 November 2022 @ Lancaster University, UK</h5>
8181        < section  class ="bottom-margin "> 
8282          < div > 
8383            < a  href ="images/events/2021_4th_workshop_group_photo_ORIGINAL.png " target ="_blank "> 
84-               < img  class ="image " src ="images/events/2021_4th_workshop_group_photo.png  " alt ="Workshop Group Photo " /> 
84+               < img  class ="image " src ="images/events/2021_4th_workshop_group_photo_thumb.jpg  "  data-src =" images/events/ 2021_4th_workshop_group_photo.jpg alt ="Workshop Group Photo "  loading =" lazy " /> 
8585            </ a > 
8686          </ div > 
8787          < div > 
@@ -101,7 +101,7 @@ <h5>28 September - 30 September 2021 @ Virtual</h5>
101101        < section  class ="bottom-margin "> 
102102          < div > 
103103            < a  href ="images/events/2020_3rd_rucio_workshop_ORIGINAL.png " target ="_blank "> 
104-               < img  class ="image " src ="images/events/2020_3rd_rucio_workshop.png  " alt ="Workshop Group Photo " /> 
104+               < img  class ="image " src ="images/events/2020_3rd_rucio_workshop_thumb.jpg  "  data-src =" images/events/ 2020_3rd_rucio_workshop.jpg alt ="Workshop Group Photo "  loading =" lazy " /> 
105105            </ a > 
106106          </ div > 
107107          < div > 
@@ -118,7 +118,7 @@ <h5>10 March - 12 March 2020 @ Fermilab, USA</h5>
118118        < section  class ="bottom-margin "> 
119119          < div > 
120120            < a  href ="images/events/2019_second_coding_camp_ORIGINAL.png " target ="_blank "> 
121-               < img  class ="image " src ="images/events/2019_second_coding_camp.png  " alt ="Workshop Group Photo " /> 
121+               < img  class ="image " src ="images/events/2019_second_coding_camp_thumb.jpg  "  data-src =" images/events/ 2019_second_coding_camp.jpg alt ="Workshop Group Photo "  loading =" lazy " /> 
122122            </ a > 
123123          </ div > 
124124          < div > 
@@ -135,7 +135,7 @@ <h5>15-17 October 2019 @ CERN</h5>
135135        < section  class ="bottom-margin "> 
136136          < div > 
137137            < a  href ="images/events/2019_second_rucio_workshop_ORIGINAL.jpg " target ="_blank "> 
138-               < img  class ="image " src ="images/events/2019_second_rucio_workshop.jpg " alt ="Workshop Group Photo " /> 
138+               < img  class ="image " src ="images/events/2019_second_rucio_workshop_thumb.jpg  "  data-src =" images/events/ 2019_second_rucio_workshop.jpgalt ="Workshop Group Photo "  loading =" lazy " /> 
139139            </ a > 
140140          </ div > 
141141          < div > 
@@ -153,7 +153,7 @@ <h5>28 Feburary - 1 March 2019 @ Oslo, Norway</h5>
153153        < section  class ="bottom-margin "> 
154154          < div > 
155155            < a  href ="images/events/2018_first_coding_camp_ORIGINAL.jpg " target ="_blank "> 
156-               < img  class ="image " src ="images/events/2018_first_coding_camp.jpg " alt ="Workshop Group Photo " /> 
156+               < img  class ="image " src ="images/events/2018_first_coding_camp_thumb.jpg  "  data-src =" images/events/ 2018_first_coding_camp.jpgalt ="Workshop Group Photo "  loading =" lazy " /> 
157157            </ a > 
158158          </ div > 
159159          < div > 
@@ -202,6 +202,43 @@ <h5>1-2 March 2018 @ CERN</h5>
202202    < script  src ="assets/js/footer.js "> </ script > 
203203    < script  src ="assets/js/cta.js "> </ script > 
204204    < script  src ="assets/js/scripts.js "> </ script > 
205+     
206+     <!-- Progressive Image Loading --> 
207+     < script > 
208+       document . addEventListener ( 'DOMContentLoaded' ,  function ( )  { 
209+         const  images  =  document . querySelectorAll ( 'img[data-src]' ) ; 
210+         
211+         const  imageObserver  =  new  IntersectionObserver ( ( entries ,  observer )  =>  { 
212+           entries . forEach ( entry  =>  { 
213+             if  ( entry . isIntersecting )  { 
214+               const  img  =  entry . target ; 
215+               const  highQualitySrc  =  img . getAttribute ( 'data-src' ) ; 
216+               
217+               // Create a new image to preload the high-quality version 
218+               const  highQualityImg  =  new  Image ( ) ; 
219+               highQualityImg . onload  =  function ( )  { 
220+                 // Smoothly transition to high-quality image 
221+                 img . style . transition  =  'opacity 0.3s ease-in-out' ; 
222+                 img . style . opacity  =  '0.8' ; 
223+                 setTimeout ( ( )  =>  { 
224+                   img . src  =  highQualitySrc ; 
225+                   img . style . opacity  =  '1' ; 
226+                   img . removeAttribute ( 'data-src' ) ; 
227+                 } ,  150 ) ; 
228+               } ; 
229+               highQualityImg . src  =  highQualitySrc ; 
230+               
231+               observer . unobserve ( img ) ; 
232+             } 
233+           } ) ; 
234+         } ,  { 
235+           rootMargin : '50px 0px' , 
236+           threshold : 0.1 
237+         } ) ; 
238+         
239+         images . forEach ( img  =>  imageObserver . observe ( img ) ) ; 
240+       } ) ; 
241+     </ script > 
205242
206243</ body > 
207244
0 commit comments