Как указать различную продолжительность для slideUp и slideDown в jquery slideToggle?

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

$(document).ready(function() {
  $("#flip").click(function() {
    $("#panel").slideToggle();
  });
});
#flip {
  padding: 5px;
  width: 300px;
  text-align: center;
  background-color: #e5eecc;
  border: solid 1px #c3c3c3;
}
#panel {
  padding: 50px;
  display: none;
  width: 100%;
  height: 200px;
  z-index: 5000;
  background-color: black;
}
.f {
  position: static;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="panel">Hello world!</div>
<div id="flip">
  <span class="f">MENU</span>
</div>

Это работает удовольствие, но как я могу указать разное время для скольжения вверх и вниз?

5 ответов

Решение

Вы можете хранить продолжительность анимации в переменной и использовать ее. В функции обратного вызова slideToggle() изменить продолжительность.

var duration = 500;
$("#flip").click(function() {
  $("#panel").slideToggle(duration, function(){
    duration = $(this).is(":visible") ? 2000 : 500;
  });
});

var duration = 500;
$("#flip").click(function() {
  $("#panel").slideToggle(duration, function(){
    duration = $(this).is(":visible") ? 2000 : 500;
  });
});
#flip {
  width: 300px;
  text-align: center;
  background-color: #e5eecc;
  border: solid 1px #c3c3c3;
}
#panel {
  display: none;
  width: 100%;
  height: 150px;
  background-color: black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="panel">Hello world!</div>
<div id="flip">
  <span class="f">MENU</span>
</div>

РЕДАКТИРОВАТЬ

Я изменил свой ответ, чтобы отразить изменение в вопросе.

Вместо этого используйте slideDown() и slideUp().

CODEPEN

http://codepen.io/alexincarnati/pen/PWOPjY

Если вы хотите добавить различные длительности для скольжения вверх и вниз в jQuery, вы можете просто добавить флаг и проверить, открыто ли меню или нет, а затем использовать slideDown() и slideUp() в качестве методов. Таким образом, вы можете добавить различные длительности слайда.

$(document).ready(function() {
  var menuOpened = false;

  $("#flip").click(function() {

    if (menuOpened === false) {
      $("#panel").slideDown(1000, function() {
        menuOpened = true;
      });

    } else {
      $("#panel").slideUp(700, function() {
        menuOpened = false;
      });

    }
  });
});

Просто добавьте время в качестве параметра к slideToggle метод.

Вы можете увидеть в документах это:

slideToggle ([ продолжительность ] [, завершено ])

duration (по умолчанию: 400) Тип: Number или String Строка или число, определяющие, как долго будет выполняться анимация.

complete Тип: Function() Функция, которая вызывается после завершения анимации, вызывается один раз для соответствующего элемента.

$(document).ready(function() {
  $("#flip").click(function() {
    $("#panel").slideToggle(3000);
  });
});
#flip {
  padding: 5px;
  width: 300px;
  text-align: center;
  background-color: #e5eecc;
  border: solid 1px #c3c3c3;
}
#panel {
  padding: 50px;
  display: none;
  width: 100%;
  height: 200px;
  z-index: 5000;
  background-color: black;
}
.f {
  position: static;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="panel">Hello world!</div>
<div id="flip">
  <span class="f">MENU</span>
</div>

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

ОБНОВЛЕНИЕ:

Если вы хотите иметь разные длительности для методов slideUp() и slideDown(), вы можете сделать что-то вроде этого:

$(document).ready(function() {
  var check_state = false;
  $("#flip").click(function() {
    if (check_state === false) {
      $("#panel").stop().slideDown(3000);
      check_state = true;
    } else {
      $("#panel").stop().slideUp(1500);
      check_state = false;
    }
  });
});
#flip {
  padding: 5px;
  width: 300px;
  text-align: center;
  background-color: #e5eecc;
  border: solid 1px #c3c3c3;
}
#panel {
  padding: 50px;
  display: none;
  width: 100%;
  height: 200px;
  z-index: 5000;
  background-color: black;
}
.f {
  position: static;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="panel">Hello world!</div>
<div id="flip">
  <span class="f">MENU</span>
</div>

Вы можете прочитать о .slideToggle() в документации по jquery. slideToggle() Функция принимает два параметра:

.slideToggle ([продолжительность] [, завершено])

Первый - для длительности (в миллисекундах), а второй - для обратного вызова после завершения анимации.

$(document).ready(function() {
  $("#flip").click(function() {
    $("#panel").slideToggle(5000 /* Here is the duration of the animation in MS */, function() {
        //Do what you want here
    });
  });
});
#flip {
  padding: 5px;
  width: 300px;
  text-align: center;
  background-color: #e5eecc;
  border: solid 1px #c3c3c3;
}
#panel {
  padding: 50px;
  display: none;
  width: 100%;
  height: 200px;
  z-index: 5000;
  background-color: black;
}
.f {
  position: static;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="panel">Hello world!</div>
<div id="flip">
  <span class="f">MENU</span>
</div>

Вы можете указать время в первом параметре функции slideToggle:

$("#panel").slideToggle(4000);
Другие вопросы по тегам