#html #jquery #css
#HTML #jquery #css
Вопрос:
при первом нажатии на кнопку div должен анимироваться вправо на 300 пикселей. При нажатии 2-го раза на кнопку div должен анимироваться влево на 300 пикселей. то же самое для следующего щелчка.
Я пробовал, но он перемещается только влево, но как я могу переключиться, чтобы снова переместить div вправо?
код —
<script>
$(document).ready(function(){
$("button").click(function(){
$("div").animate({ marginLeft: "300px"});
});
});
</script>
<style>
button{
color:white;
background-color: red;
padding: 10px 20px;
}
div{
display: inline-block;
width: 150px;
height: 150px;
background-color: yellow;
margin: 20px 50px;
}
</style>
HTML —
<button>Click me</button>
<div>Hello</div>
Ответ №1:
Для достижения этой цели используйте toggleClass()
вместо animate()
добавления / удаления класса при последовательных щелчках мыши. Затем вы можете управлять анимацией с помощью transition
CSS, который работает намного лучше, чем JS. Попробуйте это:
jQuery($ => {
$("button").click(function() {
$("div").toggleClass('right');
});
});
button {
color: white;
background-color: red;
padding: 10px 20px;
}
div {
display: inline-block;
width: 150px;
height: 150px;
background-color: yellow;
margin: 20px 50px;
transition: margin-left 300ms;
}
div.right {
margin-left: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>Click me</button>
<div>Hello</div>
Я специально хотел достичь решения с помощью анимации Jquery. Можем ли мы получить решение, используя анимацию Jquery
В этом случае вам нужно проверить, каково текущее поле, и установить новое значение на основе этого. Однако следует отметить, что описанный выше подход CSS на сегодняшний день является лучшей практикой для использования.
jQuery($ => {
$("button").click(function() {
let margin = $('div').css('margin-left') == '50px' ? '300px' : '50px';
$("div").animate({'margin-left': margin});
});
});
button {
color: white;
background-color: red;
padding: 10px 20px;
}
div {
display: inline-block;
width: 150px;
height: 150px;
background-color: yellow;
margin: 20px 50px;
transition: margin-left 300ms;
}
div.right {
margin-left: 300px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>Click me</button>
<div>Hello</div>
Комментарии:
1. Я специально хотел достичь решения с помощью анимации Jquery. Можем ли мы получить решение, используя анимацию Jquery @Rory McCrossan?
2. Обратите внимание, что
Element.animate()
функция — это ванильный JS, а не jQuery.3. @OskarGrosser ну, есть и собственный
animate()
метод, но он, очевидно, использует jQuery: api.jquery.com/animate4. Мой плохой, я почему-то думал, что
$()
возвращает обычныйElement
объект, а неjQuery
объект. Вы абсолютно правы. Но функцияElement.animate()
andjQuery.animate()
в этом случае работает точно так же.