jQuery 为 div 设置动画,同时淡入和淡出触发器

Posted

技术标签:

【中文标题】jQuery 为 div 设置动画,同时淡入和淡出触发器【英文标题】:jQuery animate a div while subsequently fading triggers in and out 【发布时间】:2011-06-30 06:46:44 【问题描述】:

我有一个菜单栏,当单击图像时会在页面上滑动,当单击备用图像时会向后滑动。我想包括淡出刚刚点击的图像和淡入未点击的图像,因为菜单栏是动画的。我确信这可以通过动态函数来完成..但这超出了我的理解。

感谢您的帮助!

html

<div id="main">
    <div id="trigger_left">
        <img class="arrow_small" src="images/left_small.png"  />
    </div>
    <div id="trigger_right">
        <img class="arrow_small" src="images/right_small.png"  />
    </div>
    <div id="slider">
         <p>This is Content</p>
    </div>
</div>

javascript

$(document).ready(function() 
    //Page Load
    $('#slider').css(
        width: '30px'
    );
    // Navigation drop down menu
    $('#trigger_left').click(function() 
        $('#slider').animate(
            width: '100%'
        , 1500);
    );
    $('#trigger_right').click(function() 
        $('#slider').animate(
            width: '30px',
        , 1500);
        

    );
);

【问题讨论】:

【参考方案1】:

首先您可能想要缓存 jQuery 对象以提高性能和可读性,然后您可能想要添加 .stop() 方法来停止当前动画并从当前点触发新动画,而不是看到动画排队和循环并且表现得很奇怪。然后在点击发生时在触发器上添加.fadeOut().fadeIn()。啊,你应该习惯使用.bind() 而不是.click().keydown() 等,因为这些是bind 方法的别名,所以直接使用bind 更有效。除此之外,使用带有绑定等的事件命名空间更容易。 Check the jQuery API!

var trigger_left = $('#trigger_left'),
    trigger_right = $('#trigger_right'),
    slider = $('#slider');

slider[0].style.width = "30px"; // and use native js where you can 
        //- it speeds things up and prepares you for when you can't use jQ :)

trigger_left.bind('click', function() 
    trigger_left.stop().fadeOut();
    trigger_right.stop().fadeIn();
    slider.stop().animate(
        width: '100%'
    , 1500);
);
trigger_right.bind('click', function() 
    trigger_right.stop().fadeOut();
    trigger_left.stop().fadeIn();
    slider.stop().animate(
        width: '30px',
    , 1500);
    

);

【讨论】:

.bind('click') 和 .click() 之间的速度差异可以忽略不计。此外,尽可能不要使用原生 js,使用在速度/可读性方面最佳的。 slider[0].style.width 不会为您节省一毫秒的时间。 @Alexey 首先 bind 有更多的功能而且速度更快,反对它的使用是愚蠢的。其次jsperf.com/jq-css-vs-dom-style 在你说话之前检查测试 - 即使与 jQuery 混合使用原生 JS/DOM 操作也快得多。事情加起来,有点在这里,突然你的页面在糟糕的上网本和旧电脑上运行得更好——不是每个人都是核心 i7 的开发人员——我正在分享关于良好实践的提示,所以如果你提供,请不要反对那些没有更好的交换。 @Alexey Lebedev:希望你确实运行了这些测试——在 FF3.6 上 jQuery/CSS 操作比原生慢 93%,在 IE 上差异会更大——你应该重新审视你的方法网络开发或至少保留给自己 - 非常喜欢 @Tom "jQuery/CSS 操作比原生慢 93%" - 实际上浏览器重排需要大部分时间,但是好的,让我们就这一点达成一致。但是我们在这里只讨论一个调用,而不是在 mousemove 处理程序中的数千个调用(我自己很少使用 jQuery)。你提倡的是过早的优化。我无意将你带到我的观点,只是解释这不是事情加起来的情况。为什么要牺牲可读性来获得令人怀疑的速度增益? @Tom 要点和优雅的代码。实施后,我对其进行了一些修改。设置它,使淡入的箭头等到滑块的动画完成。感谢您的时间和精力!

以上是关于jQuery 为 div 设置动画,同时淡入和淡出触发器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery在悬停时更改(带有淡入淡出动画)div的背景图像

JQuery:结合动画 CSS 和淡入淡出

jQuery-4.动画篇---淡入淡出效果

JQuery动画之淡入淡出动画

IE在JQuery淡入淡出/不透明动画中扭曲文本

JQuery动画