повторно использовать контейнер Div для загрузки изображений - PullRequest
0 голосов
/ 25 марта 2010

Что я хотел бы сделать: используйте один контейнер для загрузки изображений.

Как сейчас: У меня есть одиннадцать (11) контейнеров в HTML-разметке, каждый со своим div. каждый контейнер содержит 4 изображения (2 изображения рядом и сверху и снизу) при нажатии ссылки в теге привязки div с изображениями исчезает.

jQquery аккордеон используется для навигации. Типичный пример:

<li>
  <a class="head" href="#">commercial/hospitality</a>
  <ul>
    <li><a href="#" projectName="project1" projectType="hospitality1" 
        image1="images/testImage1.jpg" 
        image2="images/testImage2.jpg" 
        image3="images/testImage3.jpg"
        image4="images/testImage4.jpg">hospitality project number 1</a>
    </li>

    <li><a href="#" projectName="project2" projectType="hospitality2"
        image1="images/testImage1.jpg" 
        image2="images/testImage2.jpg" 
        image3="images/testImage3.jpg"
        image4="images/testImage4.jpg">hospitality project number 2</a>
    </li>

    <li><a href="#" projectName="project3" projectType="hospitality3"
        image1="images/testImage1.jpg" 
        image2="images/testImage2.jpg" 
        image3="images/testImage3.jpg"
        image4="images/testImage4.jpg">hospitality project number 3</a>
    </li>
  </ul> 
</li>

Типичный <div> контейнер, используемый для вставки изображений, в настоящее время их 11:

<div id="hospitality1" class="current">
  <div id="image1"><img src="images/testImage.jpg"/></div>
  <div id="image2"><img src="images/testImage.jpg"/></div>
  <div id="image3"><img src="images/testImage.jpg"/></div>  
  <div id="image4"><img src="images/testImage.jpg"/></div>
</div>

Вот код, который я сейчас использую, он работает, но есть ли лучший способ чтобы сделать это, что будет повторно использовать только один контейнер Div для загрузки изображений?

$(document).ready(function(){
  $('#navigation a').click(function (selected) {    

    var projectType = $(this).attr("projectType"); //projectType
    var projectName = $(this).attr("projectName"); //projectName

    var image1 = $(this).attr("image1"); //anchor tag for image number 1
    var image2 = $(this).attr("image2"); //anchor tag for image number 2
    var image3 = $(this).attr("image3"); //anchor tag for image number 3
    var image4 = $(this).attr("image4"); //anchor tag for image number 4

    console.log(projectType);   //returns type of project
    console.log(projectName);   //returns name of project
    console.log(image1);        //returns 1st image
    console.log(image2);        //returns 2nd image
    console.log(image3);        //returns 3rd image
    console.log(image4);        //returns 4th image

    $(function() {      
      $(".current").hide(); // hides previous selected image
      $("#" + projectType ).fadeIn("normal").addClass("current");

    });                     
});

Как видите, разметка становится довольно большой.
Любая помощь приветствуется.
ussteele

1 Ответ

0 голосов
/ 25 марта 2010

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

$((function(){
  $('#navigation a').click(function (selected) {       
    $("#imgDiv").hide(); //Hide the div

    $("#projectName").text($(this).attr("projectName")); //Set name
    $("#projectType").text($(this).attr("projectType")); //Set type
    for(var i = 1; i<=4;i++) { //Replace Images
      $("#image" + i).attr("src", $(this).attr("image" + i);
    }

    $("#imgDiv").fadeIn("normal"); //Fade back in, only one - no need for current
  });                     
});

Использование этого HTML-кода для вашего отдельного div:

<div id="imgDiv">
  <div id="image1"><img src="images/testImage.jpg"/></div>
  <div id="image2"><img src="images/testImage.jpg"/></div>
  <div id="image3"><img src="images/testImage.jpg"/></div>  
  <div id="image4"><img src="images/testImage.jpg"/></div>
  <span id="projectName"></span><span id="projectType"></span>
</div>

Если я неправильно понял, пожалуйста, прокомментируйте и исправьте, мы определенно можем сделать эту работу с одним div: :)

...