Изменить направление анимации кнопки по центру при показе (продолжительность)

#javascript #jquery #css #animation #button

#javascript #jquery #css #Анимация #кнопка

Вопрос:

У меня есть div с несколькими абзацами, которые я хочу отобразить через .show () по запросу. В этом div есть другой div, содержащий кнопку. Для этого div установлено выравнивание текста по центру, так что моя кнопка находится в середине всего текста в абзацах.

При использовании show (1000) текст анимируется сверху вниз, именно так, как я этого хочу. Однако кнопка, вместо того, чтобы следовать этому поведению, скользит слева.

 $('.showme').show(1000);  
     .wrapper {
        text-align: center;
    }
    
    .button {
        position: absolute;
    }
    
    .showme {
      display: none;
      width: 400px;
    }  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="showme">
    <p>
        Text
    </p>
    <p>
        More Text
    </p>
    <div class="wrapper">
        <button class="button">Hello</button>
    </div>
</div>  

Вы можете увидеть поведение в этом JSFiddle

Я хочу, чтобы кнопка сразу же оказалась посередине и скользила вниз вместе с абзацами. Как бы этого добиться?

РЕДАКТИРОВАТЬ: … сохраняя логику выравнивания текста Div-оболочки в том виде, в каком она есть в настоящее время. Я только хочу изменить способ анимации, а не то, как расположена кнопка. Мне нужно сделать это таким образом в моем проекте.

Ответ №1:

Если вы хотите сразу установить кнопку в середину, вам следует расположить эту кнопку. JSFiddle

 .wrapper {
  text-align: center;
  position: relative;
}
.button {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}
  

Редактировать:

Если вы хотите сохранить стили div.wrapper без изменений, но вы можете удалить position: absolute; из кнопки, вы можете попробовать использовать $('.showme').slideDown(1000); JSFiddle

Если вы хотите сохранить стили div.wrapper без изменений, а также создать свою собственную анимацию, вам следует .addClass("nameClass") использовать свои собственные стили и не использовать .show()

Комментарии:

1. Есть ли способ сделать это без изменения логики Div? (Я обновил свой вопрос)

2. Но кнопка анимируется так же, как и текст, когда вы добавляете длинный текст в свой абзац, вы увидите, что текст также анимируется слева направо. Это потому, что оболочка showme изменяется с ширины 0px до 400px

3. @SvenEngling Я обновил вопрос, и я думаю, что слайд-шоу — это то, что вы ищете.

4. О, слайд-шоу действительно работает. Я знал об этой функции, но я не знал, что она также устанавливает атрибут отображения, поэтому я попробовал show () перед slideDown (), что, конечно, не сработало. Вероятно, в следующий раз мне следует более внимательно прочитать документы.

Ответ №2:

Замените ваш CSS-файл этим кодом

  .wrapper {
    position: relative;
}
.button {
  position: absolute;
  left: 50%;
  right: 50%;
  transform: translateX(-50%);
}

.showme {
  display: none;
  width: 400px;
}
  

Ответ №3:

 .wrapper {
    text-align: center;
}

.showme {
  display: none;
  width: 400px;
  border: 1px solid black;
  text-align: center;
}
  

Это делает свое дело. Вам не нужен весь остальной HTML.
http://jsfiddle.net/zvj3axmf

Или вы можете сделать что-то вроде этого: http://jsfiddle.net/yjacu3bL Это исчезнет в кнопке под текстом после завершения первой анимации. Но было бы лучше, если бы вы решили это с помощью css-анимации.

Просто добавил рамку, чтобы показать вам, как это выравнивается.

Комментарии:

1. Когда я использую эту скрипку, теперь весь div перемещается слева направо. Это еще хуже: D

2. @SvenEngling Это уже было сделано, вы не заметили, потому что вокруг этого не было границы, и я все отцентрировал. show Функция делает это по умолчанию, когда вы ее анимируете. Если вы хотите другую анимацию, вам следует посмотреть на функцию анимации или просто включить / выключить все, что вы хотите. Без центрирования может показаться, что все работает так, как вы хотите, но анимация по-прежнему выполняется слева вверху справа внизу jsfiddle.net/41yewnov . Как я уже сказал, вы должны выяснить, какую анимацию вы хотите использовать w3schools.com/jquery/eff_animate.asp

3. @SvenEngling Тем лучше избегать анимации jquery и использовать css. Css в принципе может делать все в наши дни, но требуется немного больше времени, чтобы хорошо в этом разобраться.

4. Я посмотрю, смогу ли я по-настоящему разобраться в CSS. На данный момент я последовал ответу Джо Кокера и использовал slideDown вместо show , это делает именно то, что мне нужно. Спасибо