#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.asp3. @SvenEngling Тем лучше избегать анимации jquery и использовать css. Css в принципе может делать все в наши дни, но требуется немного больше времени, чтобы хорошо в этом разобраться.
4. Я посмотрю, смогу ли я по-настоящему разобраться в CSS. На данный момент я последовал ответу Джо Кокера и использовал slideDown вместо show , это делает именно то, что мне нужно. Спасибо