在 jQuery 中与 CSS 中的过渡同时使用淡入淡出和淡出

Posted

技术标签:

【中文标题】在 jQuery 中与 CSS 中的过渡同时使用淡入淡出和淡出【英文标题】:Using fadeIn and fadeOut in jQuery at the same time as transition in CSS 【发布时间】:2020-03-30 02:43:07 【问题描述】:

我正在使用fadeIn 和fadeOut 来动画对象进出视图。我还想同时为对象的“左”属性设置动画。这适用于我的示例中的fadeOut,但不适用于fadeIn。在我的原始作品中,它适用于淡入淡出,但在淡出淡出时,过渡出现在淡入淡出之前。

也就是说,对象首先移动到它的新位置,然后淡出。

需要做什么才能让 CSS 过渡与 jQuery 淡出同时发生?

$('.wrapper').click(function() 
		var thisInClick = this;
		if ($(thisInClick).hasClass('show')) 
				$(thisInClick).toggleClass('show');
				$(thisInClick).find('.box').fadeOut(1000);
			 else 
				$(thisInClick).toggleClass('show');
				$(thisInClick).find('.box').fadeIn(1000);
			
);
.wrapper 
  display: block;
  height: 300px;
  width: 800px;
  padding: 100px;
  background: blue;


.box 
  position: relative;
  background: white;
  padding: 50px;
  width: 100px;
  left: 70%;
	display: none;
  transition: left 0.5s ease-out;


.wrapper.show .box 
  left: 10%;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "wrapper">
  <div class = "box">
    I AM BOX
  </div>
</div>

小提琴:https://jsfiddle.net/uev2qzso/1/

编辑:我应该提到原始代码在 CSS 中使用了不透明度过渡。问题是我显示的是两个链接,如果您在它们具有 opacity:0 时单击它们;他们会开火。我需要避免这种情况。

【问题讨论】:

【参考方案1】:

我稍微更改了 css 以在屏幕上显示所有动画。 如果我理解正确,您可以使用 JQuery 函数事件回调。在这种情况下,start 事件。

$('.wrapper').click(function() 
		var thisInClick = this;
		if ($(thisInClick).hasClass('show')) 
				$(thisInClick).find('.box').fadeOut(
        duration: 1000,
        start: function() 
        		$(thisInClick).toggleClass('show');
        	
        );
			 else 
				
				$(thisInClick).find('.box').fadeIn(
        duration: 1000,
        start: function() 
        		$(thisInClick).toggleClass('show');
        	
        );
			
);
html, body 
  display: inline-block;
  width: 100%;
  margin: 0px;
  padding: 0px;

.wrapper 
  display: block;
  height: 300px;
  width: 100%;
  padding: 0px;
  background: blue;
  box-sizing: border-box;


.box 
  position: relative;
  background: white;
  padding: 50px;
  width: 50px;
  left: 70%;
	display: none;
  transition: left 0.5s ease-out;


.wrapper.show .box 
  left: 10%;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "wrapper">
  <div class = "box">
    I AM BOX
  </div>
</div>

【讨论】:

我将此标记为答案,因为它比其他答案更适合该问题。我选择使用指针事件:无;在 CSS 中以一种更简洁、更简洁的方式来实现它。【参考方案2】:

关于您的编辑行。您可以在元素具有 opacity: 0 时使用 CSS 属性 pointer-events: none,然后在元素为 opacity:1 时使用 pointer-events: all 以避免链接被点击或触发。希望这可以帮助!

【讨论】:

虽然这并不能直接回答问题,但它以最干净的方式解决了我最初的问题。我和这个一起去了。 是的,这可能是最干净、最简单的方法。如果这对您有帮助,您可以投票吗? :)【参考方案3】:

你可以试试这个解决方案,将淡入淡出移到 CSS

https://jsfiddle.net/ud6s5yxt/1/

.wrapper 
  display: block;
  height: 300px;
  width: 800px;
  padding: 100px;
  background: blue;


.box 
  position: relative;
  background: white;
  padding: 50px;
  width: 100px;
  left: 70%;
  opacity:0;
  transition: all 0.5s ease-out;


.wrapper.show .box 
  left: 10%;
  opacity:1;



$('.wrapper').click(function() 
        var thisInClick = this;
        $(thisInClick).toggleClass('show');
);



<div class = "wrapper">
  <div class = "box">
    I AM BOX
  </div>
</div>

【讨论】:

我应该在问题中提到这是原始代码。问题是我显示的是两个链接,如果您在它们具有 opacity:0 时单击它们;他们会开火。我需要避免这种情况。【参考方案4】:

使用此代码.fadeToggle()。它会帮助你

【讨论】:

以上是关于在 jQuery 中与 CSS 中的过渡同时使用淡入淡出和淡出的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 动画和 CSS 过渡不协调

jQuery .css() 中的 CSS3 过渡

CSS 过渡不适用于 chrome 45 中的 scale(0) + 硬件加速?

在jQuery中与其父级一起运行回调函数

css3 过渡延迟,如果动画 svg 填充和颜色同时 chrome 中的错误在 FF 中起作用

什么更快? CSS3 过渡还是 jQuery 动画?