2016-01-19 2 views
0

У меня проблема, и мне нужна ваша помощь. У меня есть несколько ссылок (в <aside>), приводящих к нескольким различным меню (в <section>). При щелчке по ссылке отображается только соответствующий div в <section>, остальные скрыты. Эта часть в порядке и работает. Что не работает, когда я нажимаю на изображение:Как скрыть и показать содержимое и наоборот?

  1. текущий ДИВ (.menu) в <section> должны быть скрыты;
  2. должна быть показана такая же картина (с большим размером);
  3. Когда вы нажмете еще раз над большим изображением, большое изображение должно исчезнуть, и текущий div в .menu (тот, который был спрятан на первом шаге) должен появиться еще раз. Вид переключения между контентом.

Так что, если я нажимаю на изображение на «втором div», то изображение с большим размером должно быть показано (содержимое «второго div» должно быть скрыто), и когда я нажимаю еще раз на большой изображение должно исчезнуть, а содержимое «второго div» должно быть возвращено.

Я пробовал с toggle(), но не имел успеха. Либо я не использовал его правильно, либо не подходит для моего дела. Здесь мне удалось добраться.

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

$(window).on("load", function() { 
 
    $("div.menu:first-child").show(); 
 
}); 
 

 
$(".nav a").on("click", function() { 
 
    $("div.menu").fadeOut(30); 
 

 
    var targetDiv = $(this).attr("data-rel"); 
 
    setTimeout(function() { 
 
    $("#" + targetDiv).fadeIn(30); 
 
    }, 30); 
 
}); 
 

 
var pictures = $(".img-1, .img-2").on("click", function() { 
 
    $("div.menu:active").addClass("hidden"); 
 

 
    //how to reach out only the current, active div (not all div's in .menu)? 
 

 
    $(".menu").hide(); 
 
    var par = $("section") 
 
    .prepend("<div></div>") 
 
    .append("<img id='pic' src='" + this.src + "'>"); 
 

 
    var removePictures = $("#pic").on("click", function() { 
 
    $(this).hide(); 
 
    $(".hidden").show(); 
 
    }); 
 

 
});
.menu { 
 
    width: 100%; 
 
    display: none; 
 
} 
 
.menu:first-child { 
 
    display: block; 
 
} 
 
.row { 
 
    display: inline-block; 
 
    width: 100%; 
 
} 
 
.img-1, 
 
.img-2 { 
 
    width: 120px; 
 
    height: auto; 
 
}
<!doctype html> 
 
<html> 
 

 
<head> 
 
</head> 
 

 
<body> 
 
    <aside> 
 
    <ul class="nav"> 
 
     <li><a href="#content1" data-rel="content1">To first div</a> 
 
     </li> 
 
     <li><a href="#content2" data-rel="content2">To second div</a> 
 
     </li> 
 
     <li><a href="#content3" data-rel="content3">To third div</a> 
 
     </li> 
 
    </ul> 
 
    </aside> 
 
    <section> 
 
    <div class="menu" id="content1"> 
 
     <h3>First Div</h3> 
 
     <div class="present"> 
 

 
     <div class="row"> 
 
      <div> 
 
      <p>Blah-blah-blah. This is the first div.</p> 
 
      <img class="img-1" src="http://www.newyorker.com/wp-content/uploads/2014/08/Stokes-Hello-Kitty2-1200.jpg"> 
 
      </div> 
 
     </div> 
 

 
     <div class="row"> 
 
      <div> 
 
      <img class="img-2" src="https://jspwiki-wiki.apache.org/attach/Slimbox/doggy.bmp"> 
 
      <p>Blah-blah-blah. This is the first div.</p> 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 

 
    <div class="menu" id="content2"> 
 
     <h3>Second Div</h3> 
 
     <div class="present"> 
 

 
     <div class="row"> 
 
      <div> 
 
      <p> 
 
       Blah-blah-blah. This is the second div. 
 
      </p> 
 
      <img class="img-1" src="http://www.newyorker.com/wp-content/uploads/2014/08/Stokes-Hello-Kitty2-1200.jpg"> 
 
      </div> 
 
     </div> 
 

 
     <div class="row"> 
 
      <div> 
 
      <img class="img-2" src="https://jspwiki-wiki.apache.org/attach/Slimbox/doggy.bmp"> 
 
      <p> 
 
       Blah-blah-blah. Yjis is the second div. 
 
      </p> 
 
      </div> 
 
     </div> 
 

 
     </div> 
 
    </div> 
 

 
    <div class="menu" id="content3"> 
 
     <h3>Third Div</h3> 
 
     <div class="present"> 
 

 
     <div class="row"> 
 
      <div> 
 
      <p> 
 
       Blah-blah-blah. This is the third div. 
 
      </p> 
 
      <img class="img-1" src="http://www.newyorker.com/wp-content/uploads/2014/08/Stokes-Hello-Kitty2-1200.jpg"> 
 
      </div> 
 
     </div> 
 

 
     <div class="row"> 
 
      <div> 
 
      <img class="img-2" src="https://jspwiki-wiki.apache.org/attach/Slimbox/doggy.bmp"> 
 
      <p> 
 
       Blah-blah-blah. This is the third div. 
 
      </p> 
 
      </div> 
 
     </div> 
 

 
     </div> 
 
    </div> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 

 
</body> 
 

 
</html>

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

+0

в обработчике событий jQuery ... 'this' является элементом, на котором действует. Хотите что-то сделать с родителем ... '$ (this) .parent(). DoSomething()' или '$ (this) .parent(). Find ('. SomeClass'). DoSomething()'. Прочитайте API для всех способов прохождения ... каждый метод показывает примеры – charlietfl

+0

Я прочитал много документов и пробовал много-много вещей. Если бы мне удалось сделать то, что я хотел, я не собирался спрашивать, как это сделать и что я пропустил. Мне нужно письменное решение, а не совет «иди туда и прочитай». Я уже прочитал это, и это не помогло мне ... – GRG

+0

Очень жаль, что пытались помочь. Вам нужно начать с '$ (this)' – charlietfl

ответ

0

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

Вот скрипка для вас: https://jsfiddle.net/hwd4b0ag/

В частности, я изменил ваш последний клик слушатель:

var pictures = $(".img-1, .img-2").on("click", function() { 
    var parentDiv = $(this).closest('div.menu').hide(); 

    var blownUpPic = $("<img>").attr({ 
    id: 'pic', 
    src: this.src, 
    'data-parent': parentDiv.attr('id') 
    }) 
    .appendTo("section") 
    .on('click', function() { 
    $('#' + $(this).attr('data-parent')).show(); 
    $(this).remove(); 
    }); 
}); 

Теперь, давайте рассмотрим его!

Во-первых,

var parentDiv = $(this).closest('div.menu').hide(); 

В слушателю JQuery, то this переменная хранит текущее Java-DOM-элемент, который является получателем слушателя событий. В вашем случае это относится к элементу, который соответствует ".img-1, .img-2".

.closest(selector) будет проходить через DOM (включая текущий элемент) и найти первый соответствующий элемент для предоставленного селектора. В этом случае он находит ваш контейнер div с классом menu. Затем мы скроем этот div и сохраним ссылку на него в переменной.

Далее мы создаем полноразмерную версию изображения и присвоить некоторые атрибуты:

var blownUpPic = $("<img>").attr({ 
    id: 'pic', 
    src: this.src, 
    'data-parent': parentDiv.attr('id') 
    }) 

Мы устанавливаем атрибут в id нашего контейнера DIV data-parent, поэтому мы имеем обратную ссылку это позже.

Затем мы добавим наш образ в DOM:

.appendTo("section") 

и объявить новый щелчок перехватчик для него:

.on('click', function() { 
    $('#' + $(this).attr('data-parent')).show(); 
    $(this).remove(); 
    }); 

С $(this).attr('data-parent') мы используем ссылку на наш контейнер DIV, который мы назначенную ранее , а затем восстановить этот элемент по его id. Мы отобразим div контейнера и удалим полноразмерный образ.

Все сделано!


Есть лучшие способы кодировать, но я думаю, что это хороший следующий шаг для вас, что это аналогично текущего кода.

+0

Кевин, я очень ценю ваш ответ. Как вы можете видеть, я новичок и до сих пор недостаточно осведомлен о том, как все работает правильно. Вы правы, у меня нет хорошего понимания, но однажды я очень надеюсь, что так и будет. Извините за недопустимый вопрос (это был мой первый вопрос здесь), поэтому все еще нужно немного больше опыта. Тем не менее, мне было очень полезно увидеть письменный (рабочий) код с объяснениями, что он делает. Теперь у меня есть хорошая база, чтобы перешагнуть и пересмотреть. Еще раз спасибо за ваше время, потраченное на то, чтобы писать и объяснять :) – GRG

Смежные вопросы