2015-04-26 3 views
2

Я создал простую коробку, которая должна открываться/закрываться при нажатии на нее, чтобы показать содержимое. Я также хочу, чтобы пользователь наводил на h2-элемент. Это работает, но не должно быть эффекта зависания, когда ящик открыт.Удалить эффект зависания, если следующий элемент виден

Можно ли это сделать с помощью CSS или мне нужно использовать JS?

$('.box > h2').on('click', function() { 
 
     $(this).next('div').slideToggle(); 
 
    });
.box h2 { 
 
     padding: .5em; 
 
    } 
 
    .box h2:hover { 
 
     background-color: #ccc; 
 
    } 
 
    .box > div { 
 
     display: none; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"> 
 
     <h2>Title</h2> 
 
     <div>Any content</div> 
 
    </div>

+0

Что такое "парить эффект"? Если вы имеете в виду «background-color: #ccc;», с этим нет никаких проблем. –

+0

Вы имеете в виду это http://jsfiddle.net/j4jehbop/? Эти условия могут быть обработаны с помощью JQuery. Не уверен насчет css. –

+1

Вы не можете вернуться в CSS. Вы не можете сказать «хорошо, показывается div, теперь давайте модифицируем предыдущий элемент», к сожалению. – Mave

ответ

3

Там нет никакого способа сделать это только с помощью CSS, но вы можете добавить только небольшое изменение битную кода JQuery, чтобы достичь этого, используя метод toggleClass() JQuery:

Просто добавьте эффект зависания в CSS, когда <h2> имеют класс .closed, а затем каждый раз, когда вы делаете slideToggle(), вы удаляете/добавляете класс из элемента clicked. Вы можете увидеть код изменен здесь:

$('.box > h2').on('click', function() { 
 
     $(this).next('div').slideToggle(); 
 
     $(this).toggleClass('closed'); 
 
    
 
    });
.box h2 { 
 
     padding: .5em; 
 
    } 
 
    .box h2.closed:hover { 
 
     background-color: #ccc; 
 
    } 
 
    .box > div { 
 
     display: none; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"> 
 
     <h2 class="closed">Title</h2> 
 
     <div>Any content</div> 
 
    </div>

0

JQuery имеет селектор :visible. Вы можете переключить класс hover.

$('.box > h2').on('click', function() { 
 
    $(this).removeClass('hover').next('div').slideToggle(); 
 
}).hover(function() { 
 
    if (!$(this).siblings('div').is(':visible')) { 
 
    $(this).addClass('hover'); 
 
    } 
 
}, function() { 
 
    $(this).removeClass('hover'); 
 
});
.box h2 { 
 
    padding: .5em; 
 
} 
 
.box h2.hover { 
 
    background-color: #ccc; 
 
} 
 
.box > div { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"> 
 
    <h2>Title</h2> 
 
    <div>Any content</div> 
 
</div>

Смежные вопросы