Можно ли перебрать атрибут id тега img с помощью Javascript? - PullRequest
0 голосов
/ 09 июня 2018

Я разработал следующий блок кода с использованием HTML и Javascript, который является полностью функциональным:

<html>
   <body>
      <img id="img0" style="position:fixed; width:116px; height:100px;" >
      <img id="img1" style="position:fixed; width:116px; height:100px;" >
      <img id="img2" style="position:fixed; width:116px; height:100px;" >
      <img id="img3" style="position:fixed; width:116px; height:100px;" >

      <script>
         let rightArray = [300, 213, 387, 300 ];
         let bottomArray = [300, 350, 350, 200];
         let imageArray = ['image1.png', 'image2.png', 'image3.png', 'image4.png'];

         const img0 = document.querySelector('#img0');
         img0.style.right = rightArray[0] + "px";
         img0.style.bottom = bottomArray[0] + "px";
         img0.src = imageArray[0];

         const img1 = document.querySelector('#img1');
         img1.style.right = rightArray[1] + "px";
         img1.style.bottom = bottomArray[1] + "px";
         img1.src = imageArray[1];

         const img2 = document.querySelector('#img2');
         img2.style.right = rightArray[2] + "px";
         img2.style.bottom = bottomArray[2] + "px";
         img2.src = imageArray[2];

         const img3 = document.querySelector('#img3');
         img3.style.right = rightArray[3] + "px";
         img3.style.bottom = bottomArray[3] + "px";
         img3.src = imageArray[3];

      </script>
   </body>
</html>

В основном он организует некоторые гексагональные изображения в следующем шаблоне: enter image description here

Как мы видим в коде, все очень повторяется, и было бы удобнее сделать этот код внутри цикла.Но для этого мне нужен способ поместить img tag в цикл.Псевдокод того, что я хочу сделать, выглядит примерно так:

<html>
   <body>
      for(let i=0; i<4; i++)
      {
      <img id="img[i]" style="position:fixed; width:116px; height:100px;" >
      }

      <script>
         let rightArray = [300, 213, 387, 300 ];
         let bottomArray = [300, 350, 350, 200];
         let imageArray = ['image1.png', 'image2.png', 'image3.png', 'image4.png'];
         let objectNameArray = ['img0', 'img1', 'img2', 'img3'];

      for(let i=0; i<4; i++)
      {
         const objectNameArray[i] = document.querySelector('#' + objectNameArray[i]);
         objectNameArray[i].style.right = rightArray[i] + "px";
         objectNameArray[i].style.bottom = bottomArray[i] + "px";
         objectNameArray[i].src = imageArray[i];
      }
      </script>

   </body>
</html>

Я на 100% уверен, что этот последний код не работает, первый цикл полностью неверен, а второй мы можемне объявляйте и не используйте объекты так, как я это делал.Итак, в основном У меня есть два сомнения:

  1. Можно ли поместить тег img в цикл, чтобы мне не нужно было его много копировать?время, когда я обрабатываю его параметры с помощью Javascript?
  2. Можно ли объявлять и использовать различные объекты, созданные с помощью циклических взаимодействий?

Эти вопросы возникли у меня в голове только потому, что я хотел оптимизировать первый блок кода, который я разместил здесь ... Я не уверен, что то, что я хочу сделать, возможно или я пытаюсь сделатьэто правильно.Так что я открыт для разных точек зрения, чтобы делать одно и то же разными способами.Спасибо !!

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Сделайте это:

/* I changed the bottomArray values so that the images are visible in the following code snippet */
var rightArray = [300, 213, 387, 300 ],
    bottomArray = [100, 150, 150, 0],
    imageArray = [ 'gbwzdT/image1.png', 'mrWAk8/image2.png', 'f6qQJT/image3.png', 'cunGQ8/image4.png' ];

for ( var i = 0; i < 4; i++ ) {
    var element = document.createElement( 'img' );

    element.id = 'img' + i;
    element.style.cssText = 'position:fixed; width:116px; height:100px; right: ' + rightArray[ i ] + 'px; bottom: ' + bottomArray[ i ] + 'px';
    element.src = 'https://image.ibb.co/' + imageArray[ i ];
    document.body.appendChild( element )
}
0 голосов
/ 09 июня 2018

Вместо использования id s вы можете поместить необходимые данные в массив и выполнить цикл по массиву:

const data = [
  { right: 100, bottom: 100, url: 'https://i.stack.imgur.com/SjeyK.jpg?s=32&g=1'},
  { right: 20, bottom: 20, url: 'image2.png'},
  { right: 387, bottom: 350, url: 'image3.png'},
  { right: 300, bottom: 200, url: 'image4.png'},
];
data.forEach(({ right, bottom, url }) => {
  const img = document.body.appendChild(document.createElement('img'));
  img.src = url;
  img.style.right = right + 'px';
  img.style.bottom = bottom + 'px';
});
img {
  position:fixed; width:116px; height:100px;
}

Было бы даже лучше установить эти атрибуты только в CSS, хотя, если это вариант для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...