错误的 JQuery .animation()

Posted

技术标签:

【中文标题】错误的 JQuery .animation()【英文标题】:buggy JQuery .animation() 【发布时间】:2013-05-25 08:04:48 【问题描述】:

这里我在一个 div 中有 6 个 div (.sticker),onClicking 其中一个我想 fadeOut 其他保持点击的位置(这就是为什么我做 postop/posleft 的事情)然后我想将它移动到更大的 div 的中间,同时它的高度和宽度会增加,显示一个隐藏的 div(.info)。关闭也是一样! 所以,这段代码可以运行,但它真的很慢,它不像 jQuery 那样流畅,我做错了什么吗?

感谢所有社区!

$("body").on('click', '.sticker', function () 

    if (!is_open) 
        postop = $(this).position().top;
        posleft = $(this).position().left;
        $('.sticker').not(this).fadeOut(350, function () 
            $(".sticker").css("position", "absolute").css("left", posleft + "px").css("top", postop + "px");
            $(".sticker").animate(
                'top': '0px',
                'left': '300px',
                'height': '480px',
                'width': '750px',
                'left': '90px'
            , 350);
            $(".sticker").children(".wrap").animate(
                'height': '343px',
                'width': '750px'
            , 350);
            $(".sticker").find(".imgspace").animate(
                'height': '343px',
                'width': '750px'
            , 350);
            $(".sticker").find(".info").animate(
                'height': '100px'
            , 350);
            $('.arrow-left').animate(
                'left': '-20px'
            , 450);
            $('.arrow-right').animate(
                'left': '880px'
            , 450);
            is_open = true;

        );
    
    if (is_open) 
        $(".sticker").children(".wrap").animate(
            'height': '193px',
            'width': '300px'
        , 350);
        $(".sticker").find(".imgspace").animate(
            'height': '193px',
            'width': '300px'
        , 350);
        $(".sticker").find(".info").animate(
            'height': '0px'
        , 350);
        $(".sticker").animate(
            'height': '230px',
            'width': '300px',
            'top': postop,
            'left': posleft
        , 350, function () 
            $(".sticker").css("position", "static");
            $(".sticker").not(this).fadeIn(300);
            is_open = false;
        );

    

);

【问题讨论】:

你能附上一个 jsFiddle 或类似的东西吗? 【参考方案1】:

当您单击一个时,您将希望使用.siblings 隐藏所有其他人。我会对 jQuery API 文档做一些研究。这就是我要开始的地方。

【讨论】:

【参考方案2】:

正如 Yotam 所说,没有 jsFiddle 很难调试。但是让我印象深刻的事情(而且绝不是详尽无遗的,而且我不是 javascript 专家):

    缓存您的 jQuery 对象,而不是不断地重新查询 DOM (var $sticker = $('.sticker')) 将您的动画链接到相同的对象上 $sticker.children(".wrap") 和 $sticker.find(".imgspace") 有什么区别?可以不用$sticker.find(".wrap, .imgspace")吗?

您可以通过将值设置为变量对象来进一步简化代码,而不是调用相同的方法两次硬编码不同的值。

$("body").on('click', '.sticker', function () 

    if (!is_open) 
        var $position = $(this).position(),
            $sticker = $('.sticker');

        $sticker.not(this).fadeOut(350, function () 
            $sticker.css( 
                        position: 'absolute', 
                        left: $position.left+'px', 
                        top: $position.top+'px'
                    )
                    .animate(
                        'top': '0px',
                        'left': '300px',
                        'height': '480px',
                        'width': '750px',
                        'left': '90px'
                    , 350);
            $sticker.find(".wrap, .imgspace").animate(
                'height': '343px',
                'width': '750px'
            , 350);
            $sticker.find(".info").animate( 'height': '100px' , 350);
            $('.arrow-left').animate( 'left': '-20px' , 450)
                            .animate( 'left': '880px' , 450);
            is_open = true;

        );
    
    if (is_open) 
        $sticker.find(".wrap, .imgspace").animate(
            'height': '193px',
            'width': '300px'
        , 350);
        $sticker.find(".info").animate(
            'height': '0px'
        , 350);
        $sticker.animate(
            'height': '230px',
            'width': '300px',
            'top': $position.top,
            'left': $position.left
        , 350, function () 
            $sticker.css("position", "static")
                    .not(this).fadeIn(300);
            is_open = false;
        );
    
);

【讨论】:

以上是关于错误的 JQuery .animation()的主要内容,如果未能解决你的问题,请参考以下文章

Unity常用工作视图(下)

jquery 获取css3动画animation的值,改变animation的值问题

javascript JQUERY__ANIMATION

Selenium Webdriver - 等待页面在 Java 和 JavaScript 中完全加载(ajax/jquery/animation 等)

jQuery Animation logo 淡入淡出

jQuery 问题 - #<an Object> 没有方法