Как я могу масштабировать этот HTML с помощью Javascript и jQuery

#javascript #jquery #html #css

#javascript #jquery #HTML #css

Вопрос:

У меня есть веб-сайт, над которым я работаю, но есть фотогалерея, над которой я сейчас работаю, с некоторыми проблемами.

Проблема в том, что есть около 30 картинок, и я не хочу иметь 30 блоков кода, вводящих изображение. Я хочу масштабировать его так, чтобы, когда у меня будут альбомы примерно по 100 картинок в каждом, я мог отпустить его.

Я хочу сделать это с помощью Javascript, с плагином jQuery. Как я могу это сделать?

Вот код:

 <div id="main">
            <h1>Suicide Run 2008</h1>
            <div class="panel">
                <ul id="images">
                    <li><a href="images/gallery/2008suiciderun/srun1.jpg"><img src="images/gallery/2008suiciderun/thumbs/srun_t1.jpg" title="" /></a></li>
                </ul>
                <div id="controls"></div>
                <div class="clear"></div>
            </div>
            <div id="exposure"></div>           
            <div class="clear"></div>
            <div id="slideshow"></div>      
</div>
  

Есть ли способ, которым я могу написать некоторый Javascript, чтобы он генерировал блок кода (от начального тега UL до конечного тега UL), чтобы заполнить его для каждого изображения в моей папке?

Другими словами, если бы я должен был сделать это на Java, я мог бы сделать это таким образом:

 for(int i = 0; i < amountOfPictures; i  )
{
System.out.println("<a href="images/gallery/2008suiciderun/srun" i ".jpg">");
} etc...
  

Но как мне сделать это на Javascript?

Очень признателен! Я уверен, что мое объяснение отстой.

Комментарии:

1. Имеют ли изображения определенный формат именования? Что-то, что можно «подключить» к алгоритму?

2. Да, обратите внимание, что в примере с Java я использовал итератор после srun, потому что файлы выполняются следующим образом: srun1, srun2 и т.д..

Ответ №1:

На стороне сервера вам нужно собрать все URL-адреса для изображений. Тогда я бы просто использовал любой шаблонизатор для перебора этих URL-адресов. Однако, если вы должны сделать это с помощью jQuery, тогда вы можете попробовать плагин для шаблонов jQuery.

Ответ №2:

В javascript есть более элегантные способы сделать это, но это эквивалентный код.

 <div id="main">
  <h1>Suicide Run 2008</h1>
  <div class="panel">
      <ul id="images">
        <script type="text/javascript">
        var numPictures = 100; // You'll need to set this yourself.
        for (var i=0, l=numPictures; i < l; i  ) {
          document.write('<li><a href="images/gallery/2008suiciderun/srun'   i   '.jpg"><img src="images/gallery/2008suiciderun/thumbs/srun_t'   i   '.jpg" title="" /></a></li>');
        }
        </script>
      </ul>
      <div id="controls"></div>
      <div class="clear"></div>
  </div>
  <div id="exposure"></div>           
  <div class="clear"></div>
  <div id="slideshow"></div>      
</div>
  

Немного более чистая версия с использованием jQuery, как и было запрошено изначально:

 <script type="text/javascript">
window.onload = function() {
  var numPictures = 100; // You'll need to set this yourself.
  var pathPrefix = 'images/gallery/2008suiciderun/srun';
  var thumbPrefix = 'images/gallery/2008suiciderun/thumbs/srun_t';
  var container = $('#images');
  for (var i=0, l=numPictures; i < l; i  ) {
    var li = $('<li>');
    var img = $('<img>').attr('src', thumbPrefix   i   '.jpg');
    var link = $('<a>').attr('href', pathPrefix   i   '.jpg');
    link.append(img);
    li.append(link);
    container.append(li);
  }
}
</script>

<div id="main">
  <h1>Suicide Run 2008</h1>
  <div class="panel">
      <ul id="images">
      </ul>
      <div id="controls"></div>
      <div class="clear"></div>
  </div>
  <div id="exposure"></div>           
  <div class="clear"></div>
  <div id="slideshow"></div>      
</div>
  

Конечно, как указывали некоторые другие, если вам доступны сценарии на стороне сервера, вам не нужно полагаться на соглашения об именах файлов или точно знать, сколько там изображений, поскольку у вас будет прямой доступ к файловой системе.

Комментарии:

1. Это также делает то, что я хочу, но результат несовершенен, над этим, я уверен, я смогу поработать. Я ценю этот код, и поскольку он в запрошенном мной формате, я проголосую за это как за ответ (я не думал, что php подойдет лучше [у меня есть доступ к файловой системе, поскольку я веб-мастер]). Спасибо, ребята!

Ответ №3:

Вы тоже можете сделать что-то подобное:

 $('<div id="main"></div>')
    .append($('<h1></h1>').text(titleVariable))  
    .append($('<div class="panel"></div>'))  
    .appendTo('body');
  

Это не все, но это сработало бы. Я бы предложил сгенерировать код на стороне сервера для начальной загрузки, а затем, если вы загружаете больше через ajax или что-то еще, вы можете это сделать.

Хотя, возможно, было бы быстрее сгенерировать весь HTML на стороне сервера.

Ответ №4:

На самом деле javascript является неподходящим решением для этого.

Вам уже нужно знать, сколько изображений помещается в каждую папку на уровне сервера, что означает какой-то исполняемый сервером код (PHP, Java, .Net, что угодно).

Вы должны просто написать страницу динамически (как в этом примере PHP):

 ...
<ul id="images">
  <?php 
   $files = glob($folderspec.'*.php');
   for ($ii=0; $ii = count($files); $ii  )
   {
     echo '<li><a href="images/gallery/'.$folderspec.'/srun'.$ii.'.jpg" ...[ etc ]
   }
 ?>
</ul>
...
  

Это лучше для клиента, для автоматизированных поисковых систем (Google) и практически для всего остального. Хотя это можно сделать как Javascript, используя многие из решений выше, обычно это не следует делать таким образом.

Комментарии:

1. Что за вызов функции — glob? Я собираюсь попробовать это и посмотреть, что получится.

2. php.net/manual/en/function.glob.php — Выбирает шаблоны имен файлов и помещает их в массив. Действительно, если все находится в своих собственных папках, glob позволит вам выгружать массив изображений без необходимости соответствовать строгому шаблону имени файла.