Не получается увязать hover + click
Здравствуйте, пытаюсь сделать "эффектный" информационный блок... который изначально имеет "бедный" вид (img +заголовок)... при наведении в нем появляются скрытые элементы, изменяется CSS... а при клике блок расширяется, добавляется анимация и кнопка "закрыть"... клацанье по которой приводит блок к первоначальному "бедному" виду.
Но т.к. я конечно вообразил из себя "продвинутого пользователя", то пытаюсь заниматься самокодированием, а так как javascript это не для смертных, то решение стало иметь такой вид:
$(document).ready(function(){
$('.class').bind('mouseenter',function(event){ // наведение
$(this).css({
'width':'10px', // всякие изменения
});
$(this).bind('mouseleave',function(){ // отведение
$(this).css({
'width':' ' // отмена изменений
});
});
});
$('.class').click(function(event) { // событие для клика
$(this).animate({
// всякая анимация
})
.css({
// еще изменения
});
$(this).unbind('mouseenter mouseleave'); // чтобы блок с информацией не скрывался от положения курсора
event.stopPropagation();
});
$('.close button').bind('click',function(event){ // для сворачивания блока в исходное
$('.class').animate({
// возврат исходных значений
})
.css({
// возврат исходных значений
})
});
});
...как то так...даже вроде все разворачивается и сворачивается. Основная же проблема в том, что после события click по "close button" события bind('mouseleave') и bind('mouseenter') не работают...ну причина в unbind конечно, но как снова запустить бинды или как препятствовать сворачиванию блока в момент события click для '.class' ??? Что я только не перепробовал для альтернативы unbind('mouseenter mouseleave') или вообще другой схемы события.... сколько ни гуглил, но ни похожих примеров, ни похожих тем на форумах, ни подходящей рабочей схемы не встретилось. :( Скорее всего мой вариант просто "пацсталомный" для каждого кто знает javascript, но плиз! подскажите как увязать такую последовательность событий или другую схему в общих чертах, или хоть в какой раздел учебника посмотреть.... Чувствую что ситуация то трехкопеешная ;) |
wreder,
'mouseenter mouseleave' ставить на класс "бедный" через on click убирать класс "бедный" close анимировать сворачивание ставить класс "бедный" |
рони,
Спасибо за то что откликнулись, логику Вашу кажись понял, но с реализацией вот трудности... Схема с более точным видом самой задачи и попыткой внедрения новой логики:
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
.simlpe {
height: 110px;
width: 80px;
border: 1px solid #FFF;
overflow:hidden;
}
.text {
color: #000;
float: left;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
$('.simlpe').on('mouseenter', function(event){ // наведение исправил
$(this).css({
'width':'110px',
'borderTop': '1px solid #FF0000',
'borderBottom': '1px solid #FF0000',
'borderLeft': '1px solid #FF0000',
'borderRight': '1px solid #FF0000'
});
$(this).children('.text').css({
'color': '#FF0000'
});
$(this).on('mouseleave', function(){ // отведение исправил
$(this).css({
'width':'',
'borderTop': '',
'borderBottom': '',
'borderLeft': '',
'borderRight': ''
});
$(this).children('.text').css({
'color': ''
});
});
});
$('.simlpe').click(function(event) { // событие для клика
$(this).removeClass('simlpe text');
$(this).animate({
'width':'336px',
'height':'110px'
}, 'slow');
$(this).children('.text').css({
'float':'right'
});
event.stopPropagation();
});
$(document).click(function(e){ // для сворачивания блока в исходное при нажатии за границу элемента
if ($(e.target).filter('.simlpe').length != 1) {
$('.simlpe').animate({
'width':'80px',
'height':'110px'
}, 'slow').css({
'borderTop': '',
'borderBottom': '',
'borderLeft': '',
'borderRight': ''
});
$(this).children('.text').css({
'float':'',
'color': ''
});
}
$(this).addClass('.simlpe text');
});
});
</script>
</head>
<body>
<div class="simlpe">
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/>
<nobr class="text">Центральный Javascript-ресурс</nobr>
</div>
</body>
...теперь видно что я мучаюсь как Цитата:
Цитата:
P.s. Сорри за использование картинки с шапки этого сайта... |
wreder,
$(document).on('mouseenter','.simlpe', function(event) |
wreder,
примерно так ...
<!DOCTYPE HTML>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
.simlpe {
height: 110px;
width: 80px;
border: 1px solid #FFF;
overflow:hidden;
}
.text {
color: #000;
float: left;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
$(document).on('mouseenter','.simlpe', function(event){ // наведение исправил
$(this).css({
'width':'110px',
'borderTop': '1px solid #FF0000',
'borderBottom': '1px solid #FF0000',
'borderLeft': '1px solid #FF0000',
'borderRight': '1px solid #FF0000'
});
$(this).children('.text').css({
'color': '#FF0000'
});
});
$(document).on('mouseleave','.simlpe', function(event){ // наведение исправил
$(this).css({
'width':'',
'borderTop': '',
'borderBottom': '',
'borderLeft': '',
'borderRight': ''
});
$(this).children('.text').css({
'color': ''
});
});
$('.simlpe').click(function(event) { // событие для клика
$(this).removeClass('simlpe');
$(this).animate({
'width':'336px',
'height':'110px'
}, 'slow');
$(this).children('.text').css({
'float':'right'
});
event.stopPropagation();
});
$(document).click(function(e){ // для сворачивания блока в исходное при нажатии за границу элемента
var target = $(e.target).filter('.one');
if (target.length != 1) {
$('.one').animate({
'width':'80px',
'height':'110px'
}, 'slow').css({
'borderTop': '',
'borderBottom': '',
'borderLeft': '',
'borderRight': ''
});
$('.one').children('.text').css({
'float':'',
'color': ''
});
}
$('.one').addClass('simlpe');
});
});
</script>
</head>
<body>
<div class="simlpe one">
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/>
<nobr class="text">Центральный Javascript-ресурс</nobr>
</div>
</body>
|
рони, да! hey hey hey! это круто! оно и сворачивается и ховерится! не думал что один небольшой код может вызвать столько эмоций..... :victory:
я тоже догадался потом как сделать mouseenter и mouseleave через on ...и click вкупе с removeClass'ом ... а вот на счет сворачивания - это было сложно .....а у Вас оно получилось, да как хитрО.... через доп. класс.... Спасибо!.... только вот хотелось бы чтоб сворачивание было по плавнее - чтоб цветной border оставался до нужной ширины, а потом уже пропадал... т.е. как то поэтапно/посимпатичнее... Но тут опять проблемы с реализацией, как бы это смастерить.... может отслеживать конец анимации и к классам закончившим анимироваться добавлять новое значение, а потом к таким классам применять событие по доведению css до первоначального вида? ...или просто поэтапная анимация объектов за одно событие?, но у меня она что-то капризничает... |
wreder,
ксс надо ставить в конец анимации иначе анимация ещё идёт а ксс уже применено. строка 68 -- ксс убирайте в callback -- медитировать над callback можно тут http://javascript.ru/forum/dom-windo...tml#post265188 |
wreder,
callback строка 88
<!DOCTYPE HTML>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
.simlpe {
height: 110px;
width: 80px;
border: 1px solid #FFF;
overflow:hidden;
}
.text {
color: #000;
float: left;
}
</style>
<script type="text/javascript">
$(document).ready(function()
{
$(document).on('mouseenter', '.simlpe', function(event)
{// наведение исправил
$(this).css(
{
'width': '110px',
'borderTop': '1px solid #FF0000',
'borderBottom': '1px solid #FF0000',
'borderLeft': '1px solid #FF0000',
'borderRight': '1px solid #FF0000'
}
);
$(this).children('.text').css(
{
'color': '#FF0000'
}
);
}
);
$(document).on('mouseleave', '.simlpe', function(event)
{// наведение исправил
$(this).css(
{
'width': '',
'borderTop': '',
'borderBottom': '',
'borderLeft': '',
'borderRight': ''
}
);
$(this).children('.text').css(
{
'color': ''
}
);
}
);
$('.simlpe').click(function(event)
{// событие для клика
$(this).removeClass('simlpe');
$(this).animate(
{
'width': '336px',
'height': '110px'
}, 'slow'
);
$(this).children('.text').css(
{
'float': 'right'
}
);
event.stopPropagation();
}
);
$(document).click(function(e)
{// для сворачивания блока в исходное при нажатии за границу элемента
var target = $(e.target).filter('.one');
if (target.length != 1) {
$('.one').animate(
{
'width': '80px',
'height': '110px'
}, 'slow', function ()
{
$(this).css(
{
'borderTop': '',
'borderBottom': '',
'borderLeft': '',
'borderRight': ''
}
)
.addClass('simlpe')
.children('.text').css(
{
'float': '',
'color': ''
}
);
}
)
};
}
);
}
);
</script>
</head>
<body>
<div class="simlpe one">
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/>
<nobr class="text">Центральный Javascript-ресурс</nobr>
</div>
</body>
|
рони, ААААА!!! МУЖИИИК!!! ...это ИДЕАЛЬНО! ...даже не знаю что и сказать..... я прям свой жизненный css поменял будто ....поменял, закрыл фигурную, закрыл простую, точка с запятой, скрипт со слешем! :dance:
да... на счет анимации и ксс так и делал, но почему-то вместо
}, 'slow', function () {
$(this).css({
});
я всегда ставил
}, 'slow', function () {
css({
});
наверно надеясь на то что селектор вроде как выбран изначально... да... мне даже как то неловко за беспокойство по ерунде... потому как в базовых знаниях еще плаваю.... СПАСИБО человеческое большое Вам... меня эта задачка здорово обогатила в плане вкуса на коды!.... да и анимация информационного блока моего в итоге срежиссировалась как надо!... хоть на Оскар везти, за актерскую игру врятли, а вот за спецэффекты можно было бы получить! :yes: |
| Часовой пояс GMT +3, время: 14:29. |