Как получить изображения исходного размера (высоту и ширину) из вашего href и поместить их в свой attr. используя jquery - PullRequest
0 голосов
/ 28 мая 2020

привет друзья, я пытаюсь получить размер (высоту и ширину) изображения из hrf и поместить эти значения в его атрибут

Это сводит меня с ума

это это мой html:

<figure>
    <a href="image-large-1.jpg">
        <img src="image-small-1.jpg"/>
    </a>
</figure>

<figure>
    <a href="image-large-2.jpg">
        <img src="image-small-2.jpg"/>
    </a>
</figure>

<figure>
    <a href="image-large-3.jpg">
        <img src="image-small-3.jpg"/>
    </a>
</figure>

это то, что я хочу:

<figure>
    <a href="image-large-1.jpg" original-size="1000x800">   //the sizes  are example
        <img src="image-small-1.jpg"/>
    </a>
</figure>

<figure>
    <a href="image-large-2.jpg" original-size="1200x700">   //the sizes  are example
        <img src="image-small-2.jpg"/>
    </a>
</figure>

<figure>
    <a href="image-large-3.jpg" original-size="900x980">  //the sizes  are example
        <img src="image-small-3.jpg"/>
    </a>
</figure>

атрибут "исходный размер", я хочу получить его из "a hrf"

Я пытался использовать этот код, который нашел здесь, я получил исходный размер большого изображения из href (в console.log), но я не могу распечатать их в html

помогите пожалуйста

         $(".containerGallery figure a").each(function() {
                var imgSrc, imgW, imgH;
                function myFunction(image){
                    var img = new Image();
                    img.src = image;
                    img.onload = function() {   
                        return {
                            src:image,
                            width:this.width,
                            height:this.height};
                        }
                    return img;
                }
                var x = myFunction($(this).attr('href'));
                x.addEventListener('load',function(){
                    imgSrc = x.src;
                    imgW = x.width;
                    imgH = x.height;
                });
                $(this).each(function() {
                    x.addEventListener('load',function(){
                        console.log(imgW+'x'+imgH);
                        $(this).attr('original-size', imgW+'x'+imgH);
                    });
                }); 
            });

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Код JavaScript в вопросе слишком сложен и избыточен.

Вот упрощенный код, который выполняет то же самое.

// get all <a> elements inside <figure> elements
const atags = Array.from(document.querySelectorAll('figure a'));

// iterate over every <a> tag
atags.forEach(atag => {

  // create blank image element
  var img = new Image();

  // when the image loads, store its dimensions to the atag's
  // `data-original-size` attribute
  img.addEventListener('load', () => {
    let imgW = img.width,
      imgH = img.height;
    atag.dataset.originalSize = `${imgW}x${imgH}`;
    console.log('atag:', atag);
  });
  
  // load image from atag's href
  img.src = atag.href;

});
<figure>
  <a href="https://i.picsum.photos/id/1077/200/300.jpg">
    <img src="https://via.placeholder.com/40" />
  </a>
</figure>

<figure>
  <a href="https://i.picsum.photos/id/913/200/200.jpg">
    <img src="https://via.placeholder.com/50" />
  </a>
</figure>

<figure>
  <a href="https://i.picsum.photos/id/1058/100/100.jpg">
    <img src="https://via.placeholder.com/60" />
  </a>
</figure>
0 голосов
/ 28 мая 2020

Вот сценарий, который делает именно то, что вы ищете!

const getOriginalSize = (target, url) => {

  const image = document.createElement("img");
  image.src = url;
  
  image.onload = function(){
  
    target.setAttribute("original-size", `${image.naturalWidth}x${image.naturalHeight}`);
  
  }
  

  return image;
}
<figure>
    <a href="https://images.sftcdn.net/images/t_app-cover-l,f_auto/p/befbcde0-9b36-11e6-95b9-00163ed833e7/260663710/the-test-fun-for-friends-screenshot.jpg">
        <img src="https://images.sftcdn.net/images/t_app-cover-l,f_auto/p/befbcde0-9b36-11e6-95b9-00163ed833e7/260663710/the-test-fun-for-friends-screenshot.jpg"/>
    </a>
</figure>

<figure>
    <a href="https://www.velior.ru/wp-content/uploads/2009/05/Test-Computer-Key-by-Stuart-Miles.jpg">
        <img src="https://www.velior.ru/wp-content/uploads/2009/05/Test-Computer-Key-by-Stuart-Miles.jpg"/>
    </a>
</figure>


<script>

  document.addEventListener('DOMContentLoaded', () => {
  
    document.querySelectorAll("figure").forEach( (figure) => {
    
      figure.querySelectorAll("a[href]").forEach( function(targetAhref) {
      
        getOriginalSize(targetAhref, targetAhref.href);
        console.warn("image loaded and size registred!");
      
      } );
    
    } );
  
  } );

</script>
...