2013-06-13 2 views
0

У меня есть боковая панель, которая при нажатии на кнопку на боковой панели слайдов слева 250px, при нажатии на ту же кнопку, я хочу, чтобы скользить назад 250px - Я в настоящее время использую JQuery .toggle но, как я довольно новый для jquery Мне нужно спросить, что я делаю неправильно?JQuery - переключение анимации

http://jsfiddle.net/zfc3V/13/

(function($){ 
    $('a.mobile-menu-icon').toggle(
    function(){ 
     $('#sidebar').animate({left: '250px'}, 700); 
    }, 
    function(){ 
     $('#sidebar').animate({left: '0px'}, 700); 
    }); 
}); 

Я использую 1.9.1 (до .toggle был удален) и UI это не вариант.

Спасибо.

+0

[ '.toggle()'] (HTTP://api.jquery.com/toggle /) только показывает или скрывает элемент – Pete

+0

[.toogle-event] (http://api.jquery.com/toggle-event/) устарел в jquery 1.8 и удален в 1.9 –

+0

Замените всю первую строку на ' $ (document) .ready (function() {'например. Затем вы увидите, что переключатель переключает якорь. Поэтому вы можете сначала изменить это, чтобы увидеть эффект от любых изменений. –

ответ

1

но событие «кликнуть», а не переключать. Может быть с этим:

$('a.mobile-menu-icon').click(function(event){ 
var trigger = $(this); 
if(trigger.hasClass("expanded")){ 
    trigger.removeClass("expanded"); 
    $('#sidebar').animate({left: '250px'}, 700); 
} else { 
    trigger.addClass("expanded"); 
    $('#sidebar').animate({left: '0px'}, 700); 
} 
}); 
+0

Отлично, спасибо. – Jake

0

.toggle() событие было устаревшим, и не работает в этой функции больше. Добавив свойство data-open к вашему <a>, очень легко создать такую ​​функцию. Вот код, который сделает это. Единственное изменение, которое требуется, это делает ваш <a> так: <a href="#" class="mobile-menu-icon" data-open="true">Click to toggle</a>

$('a.mobile-menu-icon').click(function() { 
    var x = $(this).data('open'); 
    $('#sidebar').animate({left: (x) ? '250px' : '0px'}, 700); 
    x ? $(this).data('open', false) : $(this).data('open', true); 
}); 

Вот скрипку ссылка: http://jsfiddle.net/zfc3V/18/

+0

Одна из проблем с этим кодом заключается в том, что если вы нажмете многоугольник переключения несколько раз, анимация будет повторяться и добавляться в очередь. Используйте 'stop()', чтобы это не происходило. – Cristy

+0

@Cristy При добавлении '.stop()' к примеру в скрипте, это останавливает анимацию от запуска, добавив, что 'queue: false', похоже, решает проблему. –

+0

Да, я имел в виду использование функции 'stop()', обычно используемые для этого параметры:. .stop (0,1) 'Я думаю. – Cristy

2
  1. Стенография для document.ready является $(function(){ }); не function()
  2. Если вы хотите, чтобы что-то произошло при нажатии, вы должны добавить click event handler.
  3. Вы можете использовать CSS transitions для анимации вместо jQuery.

    $ (функция ($) {$ ('a.mobile-меню-значок'). На ('нажмите', функция() { $ ('# боковой панели'). ToggleClass ('активный') }); });

http://jsfiddle.net/zfc3V/19/

+0

По какой-то причине SO markdown не хочет форматировать строки выше как код. – Cristy

0

Используйте CSS вместо
JS:

$('a.mobile-menu-icon').on("click", function() { 
    $('#sidebar').toggleClass('show'); 
}); 

Css:

#sidebar { 
    left: 0; 
    -webkit-transition: all .7s ease; 
    -moz-transition: all .7s ease; 
    -ms-transition: all .7s ease; 
    -o-transition: all .7s ease; 
    transition: all .7s ease; 
} 

#sidebar.show { 
    left: 250px; 
}