2017-03-20 54 views
0

我试了一堆东西来暂停jQuery,所以它等待CSS动画,但它总是立即跳转到。隐藏()。请帮忙!我想用CSS滑出一个元素,然后用jQuery隐藏它,但隐藏似乎忽略了动画

这里是我当前的代码:

$('#button').on("click", function() { 
     $("#main-content").toggleClass("hide-main-content").hide(); 
     $("#csp-content").removeClass("hide-csp-content"); 
    }); 

CSS:(注意:我使用的是一个超级exagerated 4.5S,因为我想确认它.hide之前完成()踢)。

.hide-main-content, .hide-csp-content { 
    right: -100vw !Important; 
    -webkit-transition: all 4.5s ease-in-out; 
    -moz-transition: all 4.5s ease-in-out; 
    -ms-transition: all 4.5s ease-in-out; 
    -o-transition: all 4.5s ease-in-out; 
    transition: all 4.5s ease-in-out; 
} 
#main-content, #csp-content { 
    background: #FFFFFF; 
    position: relative; 
    z-index: 10; 
    -webkit-font-smoothing: antialiased; 
    -moz-osx-font-smoothing: grayscale; 
    top: 0; 
    right: -40vw; 
    width: 60vw; 
    -webkit-transition: all 0.5s ease-in-out; 
    -moz-transition: all 0.5s ease-in-out; 
    -ms-transition: all 0.5s ease-in-out; 
    -o-transition: all 0.5s ease-in-out; 
    transition: all 0.5s ease-in-out; 
} 

HTML:

<section id="main-content" class="hide-main-content"> 
<p>MAIN</p> 
</section> 

<section id="csp-content" class="hide-csp-content"> 
<p>CSP</p> 
</section> 
+0

您的javascript切换类称为滑盖主要内容和幻灯片-CSP-内容,但HTML和CSS参考捉迷藏的主要内容和隐藏-CSP-内容。是否打算在2个不同的CSS类之间切换来隐藏/显示?如果是这样,幻灯片的CSS在哪里? - 内容类? – clav

+0

clav,在试图简化我的页面为我的帖子我犯了一些错误,抱歉我现在更新了CSS。 – Player

+0

听起来像jQuery [animate](http://api.jquery.com/animate/)的工作,您将在其中传递给_complete_函数的'removeClass'执行。 –

回答

0

试试这个:

$('#button').on("click", function() { 
     $("#main-content").toggleClass("slide-main-content"); 
     setTimeout(function() { 
      $("#main-content").hide(); 
      $("#csp-content").removeClass("slide-csp-content"); 
     }, 4500); 
    }); 

OP编辑:这到底结束了解决方案,发现由于你的setTimeout(功能):

$('#button').on("click", function() { 
    $("#main-content").toggleClass("hide-main-content"); 
     setTimeout(function(){ 
      $("#main-content").hide(); 
     }, 500); 
    $("#csp-content").toggleClass("hide-csp-content"); 
     setTimeout(function(){ 
      $("#csp-content").show(); 
     }, 500); 
}); 
+0

感谢您的尝试,但它仍然是瞬间.hide()之后4500延迟没有任何反应。 – Player

0
$("#main-content").toggleClass("slide-main-content"); 
$("#main-content").one("transitionend", function() { 
    $("#main-content").hide(); 
}, false); 

你需要在hding之前检测转换结束。上面添加一个事件监听器给“transitionend”的元素,然后在被触发时隐藏。此代码将替换您的.hide()行。

+0

布兰登,谢谢你的回答,但你的代码不运行,我得到一个控制台错误: SyntaxError:期望的表达式,得到',' 你确定假设是一个双重函数().one内? – Player

+0

@Player再次尝试,我有一个错字! –

+0

由于某种原因,您的代码破坏了触发顶部点击功能的按钮。 (“click”,function(){' '$(“#main-content”).toggleClass(“slide-main-content”); $('a#open-case-study' ' ''(“#main-content”).one(“transitionend”,function(){' ''(“#main-content”).hide();' '},false);' '$(“#csp-content”).removeClass(“hide-csp-content”);' '});' – Player

0

也许,那种魔法?

下面的代码将切换2个元素的可见性。默认情况下#main-content可见,并且#csp-content被隐藏。

当单击该按钮,我们切换.hide-main-content类全局 - 在body(可以是元素本身),这将导致#main-content滑出和隐藏(所以它不使用任何空间),并在同时#csp-content是取消隐藏和滑动

如果不为你工作,请描述所需行为 - 什么是你想实现

$('#button').on("click", function(){ 
 
    $('body').toggleClass("hide-main-content"); 
 
});
body { 
 
    overflow-x: hidden; 
 
} 
 

 
#main-content, 
 
#csp-content { 
 
    background: pink; 
 
    text-align: center; 
 
    width: 60vw; 
 
    
 
    overflow: hidden; 
 
    position: relative; 
 
    top: 0; 
 
    
 
    transition: all 1.5s ease-in-out; 
 
} 
 

 
#main-content, 
 
.hide-main-content #csp-content { 
 
    right: -40vw; 
 
    visibility: visible; 
 
    max-height: 10000px; 
 
} 
 

 
#csp-content, 
 
.hide-main-content #main-content { 
 
    right: -100vw; 
 
    visibility: hidden; 
 
    max-height: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<section id="main-content"> 
 
    <p>MAIN</p> 
 
</section> 
 

 
<section id="csp-content"> 
 
    <p>CSP</p> 
 
</section> 
 

 
<button id="button" type="button">Toggle content</button>

+0

Wiktor,我有一个要求,我没有提到我的部分只是可见位置:相对的;这似乎不适用于您的设置。任何替代品? – Player

+0

@Player,你能描述一下究竟是什么样的预期行为?在你的代码中,我假设你想要隐藏'#main-content'并在按钮被点击时显示'#csp-content',但也许我错了?无论如何,我改变了我的代码,所以元素真正隐藏并使用相对定位 - 尝试一下。 –

+0

嘿,蕾,谢谢。最后,我使用setTimeout(function)实现了我所需要的,代码如下所示: '$(“#main-content”)。toggleClass(“hide-main-content”); setTimeout(function(){$ (“#main-content”)。hide();},500);''$(“#csp-content”)。toggleClass(“hide-csp-content”); setTimeout(function(){$(“ #csp-content“)。show();},500);' 它可能不太好,但它完成了工作。 – Player

0

尝试将一个transitionend事件侦听器添加到元素,然后切换类。

$('#button').on("click", function() { 
 
    $("#main-content").on('transitionend', function() { 
 
    $(this).hide(); 
 
    }).toggleClass("slide-main-content"); 
 
    $("#csp-content").removeClass("slide-csp-content"); 
 
});
.slide-main-content { 
 
    transition: transform 1s; 
 
    transform: translateX(25%); 
 
} 
 
.slide-csp-content { 
 
    color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<section id="main-content" class="hide-main-content"> 
 
<p>MAIN</p> 
 
</section> 
 

 
<section id="csp-content" class="slide-csp-content hide-csp-content"> 
 
<p>CSP</p> 
 
</section> 
 

 
<button id="button">button</button>

相关问题