Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.01.2015, 23:54
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Viewer: движение html-элемента
При загрузке страницы, генерируется viewer, список элементов c классом content_item . Мне надо показать на странице только первые пять элементов, поэтому я присваю им класс active , а остальным элементам присваеватся css-свойство display: none; . С помощью навигации я присваю/удаляю класс active элементам viewer и таким
образом пользователь может просматривать остальные элементы.

И вот тут начинается мой вопрос: как мне сделать так что бы элементы плавно уплывали в сторону, а остальные "паровозиком" тянулись за ним, до тех пор пока не покажутся (встанут в центре) все элементы с классом active ?

Я понимаю как анимировать сам элемент и задать ему так называемое "движение", но как при этом он должен изчезать при приближение к границе wrapper-а (указан жёлтой границей)? Ширина wrapper-а не должна же меняться.

Я не прошу писать за меня скрипт - я просто спрошиваю технологию. Куда копать мне копать?

<html>
  <head>
    <title>Views</title>
    <meta charset="UTF-8">
    <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
  </head>
  <body>
    <style>
      .content {
        width: 300px;
        outline: 2px yellow solid;
        overflow: hidden;
        padding: 3px;
      }
      .content_item {
        float: left;
        width: 100px;
        text-align: center;
        display: none;
      }
      .content_item.active {
        display: inline-block;
        outline: 1px red solid;
      }
      ul {
        list-style: none;
      }
      li {
        outline: 1px blue solid;
        float: left;
        height: 20px;
        width: 20px;
        text-align: center;
        margin: 5px;
        cursor: pointer;
      }
      .row.active {
        background-color: gray;
      }
    </style>
    
    <div class="content">
      <div class="content_item content_item_0 active">1</div>
      <div class="content_item content_item_1 active">2</div>
      <div class="content_item content_item_2 active">3</div>
      <div class="content_item content_item_3 ">4</div>
      <div class="content_item content_item_4">5</div>
      <div class="content_item content_item_5">6</div>
      <div class="content_item content_item_6">7</div>
      <div class="content_item content_item_7">8</div>
      <div class="content_item content_item_8">9</div>
    </div>
    
    <div class="nav">
      <ul>
        <li class="row row_1 active">0</li>
        <li class="row row_2">1</li>
        <li class="row row_3">2</li>
      </ul>
    </div>
    
    <script>
      $( document ).ready(function() {
        var i_row_total_items = 3;
        $('.row').click(function(){
          var i_active_value = parseInt($(this).text());
          $('.nav .row').each(function(i){
            $(this).removeClass("active");
            if(i === i_active_value){
              $(this).addClass("active");
            }
          });
          $('.content_item').each(function(i){
            $(this).removeClass("active");
            if( (i >= i_row_total_items * i_active_value) && (i < i_row_total_items * (i_active_value+1) ) ){
              $(this).addClass("active");
            }
          });
        });
      });
    </script>
  </body>
</html>

Последний раз редактировалось Faab, 06.01.2015 в 00:01.
Ответить с цитированием
  #2 (permalink)  
Старый 06.01.2015, 04:54
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Faab
как мне сделать так что бы элементы плавно уплывали в сторону, а остальные "паровозиком" тянулись за ним
Я бы обернул эти элементы DIV-элементом с шириной = кол-во элементов * ширину элементов. У этих элемeнтов float: left; и display: block; Далее меняя у DIV CSS-свойство left oт -(ширина DIV - ширина .content) до 0 можно видеть все элементы. Значит необходимо плавно менять значение этого св-ва или использовать CSS-cвойство transition co значением например 1s left ease-in-out 0s
Пример http://codepen.io/Malleys/pen/OPbaoG
Ответить с цитированием
  #3 (permalink)  
Старый 06.01.2015, 13:06
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Malleys ,

Сказать тебе просто спасибо - значит не сказать тебе ничего. Спасибо тебе, за твоё потраченное время, ну и конечно за сам ответ.

Да, именно такой результат я хотел достичь, но совершенно не понимал как к этому подойти. Твой ответ прост, ну и главное работает. Есть детали, которые я разбераю, но это уже говорит о моих скудных знаниях css. Одним словом: спасибо мужик.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление HTML кода после элемента Гаджи jQuery 4 22.11.2014 04:33
Добавить после каждого n элемента html код MyaSniK093 Javascript под браузер 22 02.04.2014 22:37
Проверка HTML элемента на существование MCTrane Общие вопросы Javascript 10 26.02.2014 20:51
Как то можно узнать ID HTML элемента вызвавшего JavaScript функцию? Opusel Events/DOM/Window 1 18.12.2011 18:36
Создание с помощью скрипта html элемента Anastasiya Общие вопросы Javascript 4 25.10.2011 22:28