首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery使用fadeOut隐藏内容,并成功地重复fadeIn

jQuery使用fadeOut隐藏内容,并成功地重复fadeIn
EN

Stack Overflow用户
提问于 2014-02-26 15:21:50
回答 3查看 157关注 0票数 0

我有一个带有类limailing-list,它有h4 x3 input[type=text]span

代码语言:javascript
复制
$('.mailing-list input').fadeOut();
$('.mailing-list span').fadeOut(function(){
    $('.mailing-list').append('<div><img src="/build/wp-content/themes/andersons/img/icons/tick.png"/></div>').hide().fadeIn().delay(2000).fadeOut(function(){
        $(this).remove();
        $('.mailing-list input, .mailing-list span').fadeIn();
    });
});

当我把前两个

$('.mailing-list span, .mailing-list input').fadeOut(function(){

附加的内容被重复4次。

<div><img src="/build/wp-content/themes/andersons/img/icons/tick.png"/></div>

有办法简化我的初始代码吗?

html

代码语言:javascript
复制
<li class="mailing-list">
    <h4>Join our mailing list</h4>
    <input type="text" placeholder="First name" class="input half subscribe-first">
    <input type="text" placeholder="Last name" class="input half half-last subscribe-last"> 
    <input type="text" placeholder="Email address" class="input subscribe-email">
    <span class="go subscribe-btn">GO</span>
</li>

目标是隐藏input字段和span,将H4image放在div中,延迟2秒,然后淡出,在inputsspan中淡出。

EN

回答 3

Stack Overflow用户

发布于 2014-02-26 15:33:45

使用以下代码:

代码语言:javascript
复制
$(selector).fadeOut( callback );

callback函数将对$(selector)选择的每个节点调用一次。

4节点-> 4调用。

拥有一个函数调用的一种方法是利用由Promise创建的底层fadeOut

代码语言:javascript
复制
$(selector).fadeOut().promise().done( callback );
// or
$.when( $(selector).fadeOut() ).done( callback );

使用您的代码:

代码语言:javascript
复制
$.when($('.mailing-list span, .mailing-list input')).fadeOut()).done(function(){
    $('.mailing-list').append('<div><img src="/build/wp-content/themes/andersons/img/icons/tick.png"/></div>').hide().fadeIn().delay(2000).fadeOut(function(){
        $(this).remove();
        $('.mailing-list input, .mailing-list span').fadeIn();
    });
});

然而,它并没有比你已经拥有的更简单。

票数 0
EN

Stack Overflow用户

发布于 2014-02-26 15:37:49

据我所知,从您的代码片段中可以看出,它很好,不需要简化。

如果按照描述的方式组合选择器,那么将为每个匹配元素调用完整的回调函数,在本例中有四个元素。

只要在<span>块中只有一个.mailing-list元素,附加函数就只会被调用一次。

票数 0
EN

Stack Overflow用户

发布于 2014-02-26 15:53:15

正如许多人已经说过的,您的目标是使用$('.mailing-list span')的元素集合,因此动画中的回调也是多次触发的。

简化代码的两种方法:

  1. 用div包装您的目标内容--允许您稍后向其中添加任意数量的元素。
  2. 您还可以将img容器预先加载到标记(隐藏)中,以便您的JavaScript中没有任何标记。

示例

代码语言:javascript
复制
<li class="mailing-list">
    <h4>Join our mailing list</h4>
    <div class="mailing-list-content">
        <input type="text" placeholder="First name" class="input half subscribe-first">
        <input type="text" placeholder="Last name" class="input half half-last subscribe-last"> 
        <input type="text" placeholder="Email address" class="input subscribe-email">
        <span class="go subscribe-btn">GO</span>
    </div>
    <div class="mailing-list-confirmation" style="display:none"><img src="/build/wp-content/themes/andersons/img/icons/tick.png"/></div>
</li>

JavaScript

代码语言:javascript
复制
$('.mailing-list-content').fadeOut(function() {
    var $content = $('.mailing-list-content');
    $content.closest('.mailing-list').find('.mailing-list-confirmation').fadeIn(function(){
        $(this).fadeOut(function() {
            $content.fadeIn();
        });
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22045735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档