2013-03-27 2 views
0

Итак, у меня есть div, который я хочу спуститься вниз из-за другого div при нажатии стрелки - затем снова скрыть, как только нажата кнопка формы. Я могу кодировать большинство из этого, однако я не понимаю, как скрыть div от представления, а затем сделать его раскрывающимся, используя slideToggle.jQuery - скрыть div, а затем показать по щелчку

Редактировать: Как предложено людьми ниже (спасибо), оказывается, что slideToggle() не то, что мне нужно, а скорее animate() - код ниже не работает, я добавил ссылку к пользовательскому интерфейсу jQuery, но все равно ничего.

HTML

<div class="schedule"> 
     <div class="scheduletop"> 
      <a href="/"><img src="/images/audit.png"></a> 
     </div><!-- .scheduletop --> 
     <div class="schedulebottom"> 
      <?php echo do_shortcode("[contact-form-7 id='61' title='Audit']"); ?> 
     </div><!-- .schedulebutton --> 
     <div class="thestuff"> 
      <h3>TEST!</h3> 
     <div class="slide"> 
      CLICK TEST TO SLIDE 
     </div><!-- .slide --> 
     </div><!-- .thestuff --> 
    </div><!-- .schedule --> 

JQuery

$(document).ready(function() { 
$(".slide").click(function() { 
     $(".thestuff").animate({"down": "150px"}, "slow"); 
    }); 
}); 

Любые идеи?

+0

'.slideToggle()' просто оживляет высоту элемента. Вероятно, вы хотите использовать '.animate()' для изменения положения элемента. – j08691

+0

, пожалуйста, не удаляйте свой первоначальный запрос при редактировании – G3z

ответ

1

slideToggle() не является функцией, которую вы должны использовать в этой ситуации. Он только изменяет высоту согласованных элементов, в то время как метод .animate(), с другой стороны, может перемещать ваш div в нужном направлении, но он не скрывает элемент, когда анимация закончена, поэтому вы должны использовать обратный вызов, если хотите для достижения этого. Если вы хотите разместить div за другим, вы должны использовать свойство css z-index.

+0

Спасибо. Я все еще не совсем уверен, что такое функция обратного вызова; Я новичок в jQuery. Новый код, который у меня есть, ниже, но он не анимируется, как должен. $ (document) .ready (function() { \t $ (". Thestuff"). Click (function() { $ (". Slide").aimate ("{height": "150px"}, "slow"); }); }); –

+0

Если вы хотите переместить свой div, тогда вы должны анимировать поле с отрицательным числом, например 'animate ({marginTop: '-150px'}, slow);', это переместит ваш div на 150 пикселей. Функция обратного вызова - это в основном функция, вызываемая при завершении анимации. JQuery animate() имеет свойство, называемое 'complete', которое обрабатывает обратные вызовы. Вы можете прочитать больше на эту тему по адресу http://api.jquery.com/animate/ –

1

Как вам сказали, вы должны использовать .animate().
Я сделал простой пример here.
здесь код JS

$(document).ready(function() { 
    $(".thestuff").click(function() { 
     $el = $(this).find(".slide"); 
     if (!$el.data('up')) { 
      var h3Margin = parseInt($(this).children().eq(0).height(), 10); 
      var margin = "-" + ($el.height() + h3Margin) + "px"; 
      $el.css("z-index", -10); 
      $el.animate({ 
       "margin-top": margin 
      }); 
      $el.data('up', true); 
     } else { 
      $el.animate({ 
       "margin-top": 0 
      }, { 
       complete: function() { 
        $el.css("z-index", 1); 
       } 
      }); 

      $el.data('up', false); 
     } 
    }); 
}); 

вы также можете использовать непрозрачность вместо г-индекса, но это до вас

+0

Спасибо G3z. Я отправил jsfiddle в ответ, не могли бы вы рассказать мне, почему лучше использовать код, который вы отправили, а не код в jsfiddle? Я новичок в jQuery и хотел бы узнать/узнать как можно больше. –

+0

as j08691 указал, что slideToggle() изменяет размер вашего элемента, пока я не понимаю, что вы хотите переместить элемент. Мой код не «лучше», он просто выводит разные. если вы в порядке с изменением размера, нет ничего плохого в вашем коде – G3z

+0

Хорошо, спасибо ОЧЕНЬ много за вашу помощь, это действительно оценено. –

1
$(".slide").animate(
     { top: "+=150" }, 
     1000, 
     function() { 
      $(this).hide(); 
     } 
    ); 

Приведенный выше код будет анимировать DIV вниз 150px за счет увеличения «верх ". Затем, когда закончится анимация, он скроет ваш .slide div.

Редактировать: «1000» там говорит, занять 1 секунду, чтобы завершить анимацию.

edit2: О, также убедитесь, что .slide имеет атрибут «позиция», установленный в «relative».

+0

Спасибо за ответ, дадим это! Мне любопытно, но почему код, который я написал выше, работает так же хорошо - есть ли какая-то причина, почему я должен использовать анимацию над slideToggle(), которую я написал в jsfiddle? –

+0

slideToggle() делает элемент хлюпать ничем. Так что, если он начнется с высоты 400px, то он будет постепенно хлюпать до 0px. Если это желаемый эффект, тогда идите. http://jsfiddle.net/Dtwigs/wJfDr/ Смотрите, хотите ли вы этого. Если не поможешь мне понять, что вы собираетесь делать, и я помогу. – Danwilliger

+0

Привет, Дэн, идея состояла в том, чтобы просто открыть окно div, а затем закрыть его, как только нажата кнопка отправки в форме. Очевидно, что slideToggle() будет использоваться только для одного щелчка в этом случае - можете ли вы сказать мне, имея в виду это, если мне лучше использовать ваш код или тот, который я написал в jsfiddle? Большое спасибо! –

0

Хорошо, мне кажется, что я могу добиться того, что я ищу с помощью функции slideToggle() afterall, мне просто нужно было установить основной контейнер содержимого, чтобы он не показывался до щелчка (добавлено отображение: none, в CSS).

$(document).ready(function() { 
$(".slide").click(function() { 
    $(".thestuff").slideToggle("slow"); 
    }); 
}); 

Для тех, кто может быть пытается найти аналогичные решения проверить jsfiddle

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