1

我有多个包含照片和文字的 div。当用户点击“bio”按钮时,传记文本就会出现。

如果单击图像,我该怎么做才能显示生物文本?

如果显示传记文本并且用户单击不同的图像,我怎样才能使以前的传记文本消失?我不希望它滑入和滑出,而只是淡入和淡出。

这是我的jQuery:

$('.bio-button').click(function () {
   $(this).siblings('.team-text').toggle();
});

$('.team-text .close').click(function () {
   $(this).parent('.team-text').hide();
});


$('.team-member img, .team-member-minor img').click(function() {
if ( !$(this).next('div').is(':visible') ) {
    $(".team-text").slideUp();
    $(this).next('div').slideToggle();
}
});

$('.close').click(function() {
    $(this).parent().slideUp();
});

这是我的html

    <div id="" class="team-member">
    <div class="team-text">
        <p>hello this is Billy's text</p>
        <div class="close"></div>
    </div><!-- .team-text -->
    <div class="team-photo">
        <img width="437" height="293" src="http://www.mgrear.com/clients/gls/wp-content/uploads/2013/02/billy.jpg" class="" alt="billy" />                          
        <h2>Billy Senecal</h2>
        <p>Producer / Director</p>
    </div><!-- .team-photo -->
    <div class="bio-button">BIO</div>   
    <div class="clear"></div>
</div><!-- #team-member -->
<div id="" class="team-member">
    <div class="team-text">
        <p>THis is Mark's text</p>
        <div class="close"></div>
    </div><!-- .team-text -->
    <div class="team-photo">
        <img width="439" height="293" src="http://www.mgrear.com/clients/gls/wp-content/uploads/2013/02/mark.jpg" class="" alt="mark" />                            
        <h2>Mark Montalto</h2>
        <p>Editor / Producer</p>
    </div><!-- .team-photo -->
    <div class="bio-button">BIO</div>   
    <div class="clear"></div>
</div><!-- #team-member -->

这是一个DEMO的链接。

4

2 回答 2

1

我不完全确定您要通过布局完成什么,但我认为这可能是您在 jQuery 方面正在寻找的。

$('.team-photo, .bio-button').on('click', function(){
    $('.team-text').fadeOut();
    $(this).prevAll('.team-text:hidden').fadeIn();
});

http://jsfiddle.net/kYJBM/

因为 '.team-text' 元素的默认状态是隐藏的,我们只需在每次点击时隐藏它们,然后使用 fadeIn() 上的 ':hidden' 过滤器来防止它在已经可见的元素中消失(这是这样的如果用户单击它两次,我们可以隐藏一个磁贴)。我认为令人困惑的是有两个函数,而第二个函数是有条件的。这是一种更简短的表达方式:

if ($(this).prevAll('.team-text').css('display') === 'none') {
    $(this).prevAll('.team-text').fadeIn();
}

(为便于阅读而编辑)

于 2013-03-08T16:59:27.230 回答
0

如果您想在瓷砖上的任何地方工作:

$('div.team-photo').click(function(){
  $(this).parent().find('.team-text').is(':visible').hide();
  $(this).siblings('.team-text').toggle();
});

如果您只想添加图片:

$('div.team-photo > img').click(function(){
  $(this).parent().parent().find('.team-text').is(':visible').hide();
  $(this).parent().siblings('.team-text').toggle();
});

这两者都会.team-text在显示自己的元素之前隐藏所有其他可见元素,并且.team-text在用户再次单击事件时隐藏关联元素。

于 2013-03-08T16:28:30.037 回答