【问题标题】:Transition effect on a :after element with JQuery toggleclass使用 JQuery 切换类对 :after 元素的转换效果
【发布时间】:2016-08-30 03:18:26
【问题描述】:

我正在使用 toggleClass 将一个类 .expend 添加到一个 div #menu 中,它将菜单的高度从 100 像素扩展到 200 像素,并且平滑过渡(进出)。
我还有一个元素#menu:after 用于设计目的。

我的问题是当 .expend 类被切换并且我的 :after 元素出现时,没有淡入(或淡出)动画。

我正在寻找一种干净的方式来添加与我的菜单相同的过渡动画效果到我的伪元素之后。我该怎么做?

	$('#link').click( function() {
		$("#menu").toggleClass("expend");
		$('.input-area').fadeToggle(300);
	} );
#menu {
  width: 200px;
  height: 100px;
  border: 1px solid blue;
  padding: 10px;
  margin: 10px;
  transition: 0.3s ease-out;
}

#menu.expend {
  height: 200px !important;
}

#menu.expend:after {
  content: 'how to get a 0.3 transition effect here (fade in and fade out) ?';
  position: absolute;
  top: 170px;
  left: 30px;
  width: 170px;
  height: 60px;
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="link" href="#">click me</a>
<div id="menu">
  <div class="input-area">
    <input type="text" name="test" id="test" value=""/>
  </div>
</div>

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    你应该为 #menu:after#menu.expend:after 设置一个 CSS 过渡,因为生成的内容不是 DOM 的一部分,javascript 无法访问它:)

    $('#link').click( function() {
    		$("#menu").toggleClass("expend");
    		$('.input-area').fadeToggle(300);
    	} );
    #menu {
      width: 200px;
      height: 100px;
      border: 1px solid blue;
      padding: 10px;
      margin: 10px;
      transition: 0.25s ease-out;
    }
    
    #menu.expend {
      height: 200px !important;
    }
    /* set values of your own , idem for transition timing :) */
    #menu:after {
      content: '';
      position: absolute;
      top: 100px;
      left: 30px;
      width: 170px;
      height: 0px;
      border: 0px solid red;
      transition:height 0.3s, top 0.3s, border 0.25s ;
      overflow:hidden;
    }
    #menu.expend:after {
      content: 'how to get a 0.3 transition effect here (fade in and fade out) ?';
      position: absolute;
      top: 170px;
      left: 30px;
      width: 170px;
      height: 60px;
      border: 1px solid red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a id="link" href="#">click me</a>
    <div id="menu">
      <div class="input-area">
        <input type="text" name="test" id="test" value=""/>
      </div>
    </div>

    【讨论】:

    • 感谢您的回答,好的我明白为什么我现在无法完成。然而,我正在寻找的是一个更像输入的淡入/淡出(慢慢出现/消失)。既然 JS 达不到,有没有办法用 CSS 做到这一点?编辑:也许通过玩可见性/不透明度?我会尽我所能!
    • @apatik opacity 将进行过渡,可见性不会(0->1 可以是数百步。可见/隐藏只是从一个切换到另一个);)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多