【问题标题】:Infinite fadeOut / fadeIn substitution of two list items on click点击时无限淡出/淡入替换两个列表项
【发布时间】:2015-12-12 11:48:22
【问题描述】:

我几乎可以正常工作,但不完全正常。我只是希望能够在一个按钮上的两个无序列表项之间不断切换,当第二个项目淡入时,第一个项目会淡出。然后在另一次点击时以相反的方式进行。在第一次点击时它可以工作,第二次也是如此,但我不知道在那之后去哪里。第一个 li 项目只是一个 bg 图像,单击时会变为一些文本,然后再次单击时会变回图像。提前致谢。 T

$(document).ready(function() {
    $('#myButton').click( function() {
        $('.contentOne').fadeOut( 'slow', function() { 
            $('.contentTwo').fadeIn('slow', function() { 
                $('#myButton').click(function() {
                    $('.contentTwo').fadeOut( 'slow', function() {
                        $('.contentOne').fadeIn('slow');
                    });
                });
            });
        });
        return false;
    });
});

【问题讨论】:

  • fadeToggle 用于一个click 上的两个元素

标签: javascript jquery fadein fadeout


【解决方案1】:

也许这可以帮助你:

html

<button id="changeToText">
  Change
</button>

<div class="gizBrainButton">
  first class
</div>
<div class="gizBrainButton">
  first class
</div>
<div class="showGizText" style="display:none;">
  Second class
</div>
<div class="showGizText" style="display:none;">
  Second class
</div>

js

$('#changeToText').click(function() {
  if ($('.gizBrainButton').is(':visible')) {
    $('.gizBrainButton').fadeToggle(1000).promise().done(function() {
      $('.showGizText').fadeToggle(1000);
    });
  } else if($('.showGizText').is(':visible')) {
    $('.showGizText').fadeToggle(1000).promise().done(function() {
      $('.gizBrainButton').fadeToggle(1000);
    });
  }
});

【讨论】:

  • 当我点击我的按钮时,这个只是刷新我的页面。内容没有任何变化
  • 您是否更改了我的示例中的选择器?
  • 是的。我看到你的代码已经改变了一点。我会试试的。
  • $('#changeToText').click(function() { $('.gizBrainButton').fadeToggle(1000).promise().done(function() { $('.showGizText ').fadeToggle(1000); }); });
  • 我不知道点击如何重新加载您的页面(如果我们只讨论此代码)。我在 JSFiddle 上做了例子:jsfiddle.net/53dwh5wz/2
【解决方案2】:

您可以存储其中一个内容部分的状态,并据此切换可见性。例如:

$(document).ready(function () {
    /** @var boolean */
    var isContentOneVisible = true;
    /** @var string */
    var fadeSpeed = 'slow';

    $('#myButton').click(function () {
        if (isContentOneVisible) {
            $('.contentOne').fadeOut(fadeSpeed);
            $('.contentTwo').fadeIn(fadeSpeed);
            isContentOneVisible = false;
            return;
        }

        $('.contentOne').fadeIn(fadeSpeed);
        $('.contentTwo').fadeOut(fadeSpeed);
        isContentOneVisible = true;
    });
});

jQuery 也提供了fadeToggle。由于它会跟踪状态本身,因此可以轻松实现您的用例。

我更喜欢轻量级的香草解决方案。例如,您可以在包含要显示和隐藏的元素的元素上切换类名。使用 CSS 切换它们的可见性,可能使用过渡来模仿 jQuery 实现的效果。

下面是一些示例代码,让您开始。

HTML:

<button class='contentToggler'>Show secondary content</button>
<ul class='toggleableContent'>
    <li class='toggleableContent__item toggleableContent__item--first'><!-- content --></li>
    <li class='toggleableContent__item toggleableContent__item--second'><!-- content --></li>
</ul>

CSS:

.toggleableContent__item {
    opacity: 1;
    transition: opacity .5s ease;
}

.toggleableContent--isToggled .toggleableContent__item--first,
.toggleableContent__item--second {
    opacity: 0;
}

.toggleableContent--isToggled .toggleableContent__item--second {
    opacity: 1;
}

Javascript:

document.addEventListener('DOMContentLoaded', function (event) {
    var toggler = document.querySelector('.contentToggler');
    var toggleableContent = document.querySelector('.toggleableContent');

    if (!toggler || !toggleableContent) {
        return;
    }

    toggler.addEventListener('click', function (event) {
        toggleableContent.classList.toggle('toggleableContent--isToggled');
    });
});

【讨论】:

  • 非常感谢您的帮助。欣赏它。
  • 没问题。如果您想放弃 jQuery 来为您解决这个问题,我添加了一个基本示例供您使用(它有点像大锤)。如果您不想这样做,请不要担心,它只是留在这里以供将来参考。
猜你喜欢
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
相关资源
最近更新 更多