Каков наилучший способ показать и скрыть навигационные элементы с помощью слайдерной анимации?

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

Я понимаю, что есть много разных способов выполнить это, и есть много подтверждающей документации с различными мнениями. Я попытался объявить действие через.click с.animate({"left": "+=56px"},"slow") и также написал функции для запуска onclick. Я понимаю, что могу легко сделать эту простую задачу гораздо более сложной, чем она должна быть.

Какие-нибудь предложения относительно самого чистого способа выполнить это?

Редактировать: Спасибо всем за их вклад. Переключение, хотя оно и минималистично по своей природе, не идет слева направо. Сценарий, который я в итоге использовал, был:

   <?// Toolbar ?>
   <div id="toolbar">

      <img src="images/balihooGreyLogo.png" class="logo"/>

      <a href="#" class="textIcon" title="Edit Copy"><img src="images/textIcon.png" border="0"/></a>

      <a href="#" class="locationIcon"><img src="images/locationIcon.png"  border="0"/></a>

      <a href="#" class="mediaIcon"><img src="images/mediaIcon.png"  border="0"/></a>

      <a href="#" class="save">SAVE</a>

      <a href="#" class="export">EXPORT</a>

   </div>




  <?// Text Input Slideout Box?>
   <div class="textInput">
      <h1>Email Copy</h1>

   </div>
<script>
 $('.textIcon').click(function () {
    $('.textInput').slideToggleWidth();
});

jQuery.fn.extend({
  slideRight: function() {
    return this.each(function() {
      $(this).animate({width: 'show'});
    });
  },
  slideLeft: function() {
    return this.each(function() {
      $(this).animate({width: 'hide'});
    });
  },
  slideToggleWidth: function() {
    return this.each(function() {
      var el = $(this);
      if (el.css('display') == 'none') {
        el.slideRight();
      } else {
        el.slideLeft();
      }
    });
  }
});
</script>

1 ответ

Это кажется самым простым способом сделать это. Я предполагаю, что вы скрываете их с отрицательным текстом по причинам доступности (в отличие от отображения: нет;). Единственное предложение, которое я мог бы сделать для очистки, если вы еще этого не делаете, это написать одну функцию, которая работает для всех кнопок.

$('.icon').click(function() {
       $(this).next('.nav-item').animate({"left":"+=56px"},"slow");
)};

Еще одна вещь, на которую вы, возможно, захотите взглянуть, - это некоторые достижения в скрытии элементов, которые вы хотите прочитать программами чтения с экрана, использует этот код: http://snook.ca/archives/html_and_css/hiding-content-for-accessibility (Опять же, если предположить, что именно поэтому вы прячете это с отрицательным знаком)

.element-invisible {
  position: absolute !important;
  height: 1px; width: 1px; 
  overflow: hidden;
  clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
  clip: rect(1px, 1px, 1px, 1px);
}

Вероятно, из-за ответа на вопрос, но подумал, что упомяну это.

Другие вопросы по тегам