Ответ 1
Попробуйте следующее:
$(document).ready( function(){
$('#toggle-button').click( function() {
var toggleWidth = $("#toggle").width() == 300 ? "200px" : "300px";
$('#toggle').animate({ width: toggleWidth });
});
});
Как переключить ширину div с анимацией?
HTML:
<div id="toggle-button"></div>
<div id="toggle"></div>
CSS
#toggle{
height:200px;
width:200px;
background:red;
}
#toggle-button{
height:20px;
width:20px;
background:blue;
}
JQuery
$(document).ready( function(){
$('#toggle-button').click( function() {
$('#toggle').toggle(function() {
$('#toggle').animate({width:"200px"});
}, function() {
$('#toggle').animate({width:"300px"});
});
});
});
Пример, который не работает: http://jsfiddle.net/ZfHZV/1/
Изменить: Моя цель - изменить ширину, когда я нажимаю на синий div
Попробуйте следующее:
$(document).ready( function(){
$('#toggle-button').click( function() {
var toggleWidth = $("#toggle").width() == 300 ? "200px" : "300px";
$('#toggle').animate({ width: toggleWidth });
});
});
Чувак! ваш код работает, вы просто не понимаете, что он делает...
$('#toggle-button').click( function() { // Execute when the toggle button is clicked.
$('#toggle').toggle(function() { // Attach toggle function that fire different
// callback when clicked.
$('#toggle').animate({width:"200px"});
}, function() {
$('#toggle').animate({width:"300px"});
});
});
Нажмите на синий div, а затем на красную пару раз и посмотрите, как это работает.
Обратите внимание, что вам лучше присоединить обратные вызовы для переключения с помощью one
вместо click
, чтобы избежать множественного обратного вызова кликов:
$('#toggle-button').one('click', function() {
$('#toggle').toggle(function() {
$('#toggle').animate({width:"200px"});
}, function() {
$('#toggle').animate({width:"300px"});
});
});
Существует два метода jQuery под названием toggle
. Один переключает видимость, что здесь не актуально. В другом случае применяется обработчик кликов, который поочередно запускает функции. Это то, что вы используете. Однако вы ошибаетесь.
То, что вы на самом деле делаете, ждет нажатия #toggle-button
, а затем привязывает обработчик кликов к #toggle
. Таким образом, анимация будет возникать при каждом нажатии #toggle
после первого нажатия #toggle-button
. (Ситуация усложнилась после нескольких кликов по #toggle-button
.
Вы хотите использовать toggle
непосредственно на #toggle-button
:
$('#toggle-button').toggle(function() { //fired the first time
$('#toggle').animate({width:"200px"});
}, function() { // fired the second time
$('#toggle').animate({width:"300px"});
});
Рабочий код (nb, который, начиная с 200px, первый щелчок ничего не делает)
Попробуйте следующее: Он работает со всеми версиями Jquery || jquery 1.10.1 || к || jquery 2.1.4 ||
Script
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$(document).ready( function(){
$('#toggle-button').click( function() {
var toggleWidth = $("#toggle").width() == 800 ? "0px" : "800px";
$('#toggle').animate({ width: toggleWidth });
});
});
</script>
$(document).ready( function(){
$('#toggle-button').click( function() {
var toggleWidth = $("#toggle").width() == 800 ? "0px" : "800px";
$('#toggle').animate({ width: toggleWidth });
});
});
#toggle{
height:200px;
width:0px;
background:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Toggle Width with jQuery</h1>
<input id="toggle-button" type="button" value="Click me!"/>
<div id="toggle"></div>
Использование JQuery 2.1.1 и установка ширины и переход с помощью CSS. Также работает с процентной шириной, изменением цвета и т.д.
$('#button-enlarge').on('click', function () {
$('.box').toggleClass('expanded');
});
.box.expanded {
background-color: #e99;
transition: all .3s;
width: 100%;
}
.box {
width: 40%;
transition: all .3s;
background-color: #f00;
color: #fff;
height: 140px;
}
#button-enlarge {
padding: 10px 15px;
border: 1px solid #999;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="button-enlarge">Click here</div>
<div class="box">box</div>
Использование $("#toggle").width() == 800
может привести к неожиданному приведению типов.
Вместо этого рассмотрите возможность использования следующего:
var foo = $("#toggle").width().toString();
var bar = foo === "0" ? "100%" : "0";
Использование $("#toggle").width() == 800
может привести к неожиданному приведению типов.
Вместо этого рассмотрите возможность использования следующего:
var foo = $("#toggle").width();
var bar = foo === 0 ? "100%" : "0";
Обратите внимание на оператор сравнения типа и значения ===
сравнивающий значение input.width()
с числовым примитивом 0
. Поскольку input.width()
оценивается как значение числа типа примитива, когда оно равно 0
это условие вернет true
.
Практика использования оператора сравнения значений ==
обходит систему типов JavaScript, что потенциально может привести к неожиданным ошибкам. Хотя это и менее опасно в условном выражении, существует риск неожиданного поведения. Пожалуйста, смотрите] эту статью для получения дополнительной информации о приведении типов] (https://medium.freecodecamp.org/js-type-coercion-explained-27ba3d9a2839).
$('#toggle-button').one('click', function() {
$('#toggle').animate({ width: 'toggle'}, 1000);
});
это переключает 0 на вашу определенную ширину
Я пробовал это и работал
$("#searchIcon").click(function(){
var toggleWidth = "0px";
if($("#searchbox").width() == 118)
{
toggleWidth="0px";
}
else
{
toggleWidth="120px";
}
$('#searchbox').animate({ width: toggleWidth });
});