列表中的动画div,让兄弟姐妹保持静态

时间:2013-06-04 20:39:35

标签: jquery css hover jquery-animate

我有一个垂直的div列表,我在悬停时动画。我希望其余的人保持在相同的位置,而选定的一个“成长”(我讨厌说,但想想MacOS Launcher)。我知道如果我使用JavaScript循环绝对定位每一个,我就能做到,但我希望它尽可能地动态。

想法?

HTML:

<div id="leftMenu">
    <div id="lmHome" class="lmSelected"><i class="icon-home icon-2x"></i></div>
    <div id="lmSearch"><i class="icon-search icon-2x"></i></div>
    <div id="lmFeed"><i class="icon-rss icon-2x"></i></div>
    <div id="lmPeople"><i class="icon-group icon-2x"></i></div>
    <div id="lmNew"><i class="icon-plus icon-2x"></i></div>
    <div id="Div2"><i class="icon-calendar icon-2x"></i></div>
    <div id="lmSettings"><i class="icon-cogs icon-2x"></i></div>
    <div id="Div1"><i class="icon-question icon-2x"></i></div>
</div>

CSS:

#leftMenu { /* The container for the buttons on the left menu*/
    position: absolute;
    left: 10px;
    padding-top: 10px;
    height: auto;
}

#leftMenu div { /* The buttons on the left menu*/
    position: relative;
    top: 0px;
    height: 50px;
    width: 50px;
    border: 1px solid gray;
    text-align: center;
    overflow: visible;
}

#leftMenu div i {
    position: relative;
    top: 12px;
}

#leftMenu div:hover {
}

#leftMenu div:last-child {
    border-bottom: 1px solid gray;
}

JavaScript的:

$('#leftMenu div').on('mouseenter', function () {
    var self = $(this);
    self.stop()
        .animate({ 'height': '+=10px' }, { duration: 100, queue: false })
        .animate({ 'width': '+=10px' }, { duration: 100, queue: false })
        .animate({ 'top': '-=5px' }, { duration: 100, queue: false })
});

$('#leftMenu div').on('mouseleave', function () {
    var self = $(this);
    self.stop()
        .animate({ 'height': '-=10px' }, { duration: 400, queue: false })
        .animate({ 'width': '-=10px' }, { duration: 400, queue: false })
        .animate({ 'top': '+=5px' }, { duration: 400, queue: false })
});

2 个答案:

答案 0 :(得分:4)

http://jsfiddle.net/bttah/

使用正确的工具完成工作。 JavaScript虽然提供了2年或3年前令人兴奋的旧浏览器动画功能,但并不适用于动画,所以在这里我举一个例子,说明如何通过3行额外的CSS来实现动画。

#leftMenu { /* The container for the buttons on the left menu*/
    position: absolute;
    left: 10px;
    padding-top: 10px;
    height: auto;
}

#leftMenu div { /* The buttons on the left menu*/
    position: relative;
    top: 0px;
    height: 50px;
    width: 50px;
    border: 1px solid gray;
    text-align: center;
    overflow: visible;
    background: #fff;

    -webkit-transition: all 0.2s ease-in-out;
    transition: all 0.2s ease-in-out;
}

#leftMenu div i {
    position: relative;
    top: 12px;
}

#leftMenu div:hover {
    -webkit-transform: scale(2);
    transform: scale(2);
    z-index: 100;
}

#leftMenu div:last-child {
    border-bottom: 1px solid gray;
}

答案 1 :(得分:1)

这是使用CSS变换的完美案例,在这种情况下为scale()

以下是一个简单示例:http://jsfiddle.net/LeBen/vYjNT/1/

more options available,您还可以使用transitions添加一些缓动。