如何旋转菜单的 V 形



我尝试过使用插件(虽然我不知道我做得是否正确),但它们似乎不起作用。我正在尝试让 V 形图像在单击时旋转,但它不起作用。我正在使用jquery并希望它留在导航栏上的同一位置。http://jsfiddle.net/clarinetking/2PGZS/19/

$(document).ready(function() {
    $('#CloseMenu').click(function() {
        $('#FixedMenu').fadeToggle('slow');
    });
});

.HTML

 <div id='FixedMenu'>
    <button class='MenuItem'></button>
    <button class='MenuItem'></button>
    <img id='Main' src='http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/800px-Smiley.svg.png'></img>
    <button class='MenuItem'></button>
    <button class='MenuItem'></button>
</div>
<img id='OpenMenu' src='http://upload.wikimedia.org/wikipedia/commons/f/f5/Chevron_down_font_awesome.svg'>
<img id='CloseMenu' src='http://upload.wikimedia.org/wikipedia/commons/d/df/Chevron_up_font_awesome.svg'>
<p id='Start'>Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis etc etc............

你的小提琴有一些额外的字符阻止了jQuery的运行。 要旋转箭头,可以使用 CSS 过渡和 jQuery .css() 方法。

新云服务器

#OpenMenu, #CloseMenu {
    position:fixed;
    width:60px;
    height:80px;
    top:0;
    left:85%;
    transition: all 1s;
}

新 jQuery

$(document).ready(function() {
    var position = 0;
    $('#CloseMenu').click(function() {
        position+=180;
        $('#FixedMenu').fadeToggle('slow');
        $('#CloseMenu').css({
            '-webkit-transform':'rotate('+position+'deg)', 
            '-moz-transform':'rotate('+position+'deg)',
            '-o-transform':'rotate('+position+'deg)',
            '-ms-transform':'rotate('+position+'deg)',
            'transform':'rotate('+position+'deg)'
        });
    });
});

这是一个工作小提琴。

我会通过创建自己的jQuery旋转动画函数来做到这一点,就像这样

$(document).ready(function() {
    var degree = 180;
    $('#CloseMenu').click(function() {
        $(this).animateRotate(degree, "slow");
        if(degree == 180) degree = -180;
        else degree = 180;
        $('#FixedMenu').fadeToggle('slow');
    });
});
$.fn.animateRotate = function(angle, duration, easing, complete) {
    var args = $.speed(duration, easing, complete);
    var step = args.step;
    return this.each(function(i, e) {
        args.step = function(now) {
            $.style(e, 'transform', 'rotate(' + now + 'deg)');
            if (step) return step.apply(this, arguments);
        };
        if(angle !== -180) $({deg: 0}).animate({deg: angle}, args);
        else $({deg: -180}).animate({deg: 0}, args);
    });
};

演示

这是基于yckart对另一个SO问题的回答

最新更新