2014-09-27 2 views
1

Я хочу заменить дивы в таблице, когда я двигаю мышь над другими дивами Существует начальная таблицу 2х2 с A, B, C и D.Заменить Div при наведении другой Div

клетки B, D, F и H не видны.

Они появлялись бы только при перемещении мыши над ячейками, которые уже есть.

Если вы переместите указатель мыши на ячейку A, ячейка C исчезнет и вместо этого появится D.

Если вы переместите указатель мыши на ячейку C, ячейка G исчезнет и вместо этого появится H.

Если вы переместите указатель мыши на ячейку E, ячейка A исчезнет и вместо этого появится B.

Если вы переместите указатель мыши на ячейку G, ячейка E исчезнет и появится F вместо этого.

#HTML 

<div id="table"> 
    <div class="row"> 
     <span class="cell A">A</span> 
     <span class="cell B">B</span> 
     <span class="cell C">C</span> 
     <span class="cell D">D</span> 
    </div> 
    <div class="row"> 
     <span class="cell E">E</span> 
     <span class="cell F">F</span> 
     <span class="cell G">G</span> 
     <span class="cell H">H</span> 
    </div> 
</div> 

#CSS 

#table { 
    display: table; 
    height:200px; 
    width:200px; 
} 
.row { 
    display: table-row; 
    height:50%; 
    width:100%; 
} 
.cell { 
    width:50%; 
    display: table-cell; 
    background: red; 
} 

.B, .D, .F, .H{ 
    display: none; 
    background blue; 
} 

#JS 

$('.row').hover(function() { 
    $(this).find('.C').hide(); 
    $(this).find('.D').show(); 
}, function() { 
    $(this).find('.D').hide(); 
    $(this).find('.C').show(); 
}); 

Я хочу, чтобы содержимое и фон ячеек менялись. Я пробовал делать это только в CSS, но не мог найти способ сделать Div disapear, попытался найти что-то здесь и нашел метод JS, но я не могу заставить его работать так, как я хочу.

Когда я перемещаю мышь над ячейкой A, C исчезает, и появляется D, но фон не заполняет всю ячейку, и когда я перемещаю мышь по ячейке C, она просто мерцает. Это несколько успешный, но я не могу понять, как бы я сделал всю работу стола.

Thanks

+0

Ваш css сломан. ** background-color: red; ** – TheStatehz

+0

'background: red;' отлично. Это «фон: синий», который не содержит двоеточие. – JME

+0

Спасибо за комментарии, я пропустил его, копируя код. –

ответ

1

Я бы не использовать .show(), так как он собирается установить display в inline, который не достигнет своей цели отображения каждого span как table-cell.

(Примечание: Там двоеточие отсутствует CSS ->background: blue;)

Это то, что я придумал:

function showAndHide(trigger, item1, item2) { 
    $(trigger) 
    .on('mouseenter', function() { 
     $(item1).hide(); 
     $(item2).css('display', 'table-cell'); 
    }) 
    .on('mouseleave', function() { 
     $(item1).css('display', 'table-cell'); 
     $(item2).hide(); 
    }); 
} 

showAndHide('.A', '.C', '.D'); 
showAndHide('.C', '.G', '.H'); 
showAndHide('.E', '.A', '.B'); 
showAndHide('.G', '.E', '.F'); 

Выезд рабочей скрипку в http://jsfiddle.net/JohnnyEstilles/o7Lbr9ox/.

+0

Мое удовольствие Фелипе.:-) – JME

+0

Я добавил границу к ячейкам, и цвет фона истекает через границу. Я исправил его переполнение: hidden; display: inline-block; в #table {}, но когда я делаю зависание, новая ячейка всегда истекает кровью. Вы знаете, как я могу это исправить? –

+0

Можете ли вы поделиться кодом, как у вас есть прямо сейчас? (HTML, CSS, JS) Это упрощает устранение неполадок. – JME

1

Вот код, необходимый для этого. Я создал метод, который, когда первый завис, второй исчезает, а третий занимает свое место.

Ссылка на рабочий jsfiddle: http://jsfiddle.net/stroz/exrz0asc/1/

$(document).ready(function() { 
    function registerConditionalHide(first, second, third) { 
     $(first).hover(function() { 
      $(second).hide(); 
      $(third).show(); 
     }, function() { 
      $(third).hide(); 
      $(second).show(); 
     }); 
    } 

    registerConditionalHide(".A", ".C", ".D"); 
    registerConditionalHide(".C", ".G", ".H"); 
    registerConditionalHide(".E", ".A", ".B"); 
    registerConditionalHide(".G", ".E", ".F"); 
}); 
+0

Спасибо за ответ! Это улучшает мой код, но я нахожу, что 1-й ответ работает именно так, как я хочу, чтобы он заполнял всю ячейку. –

+0

Приветствую вас, подумаете ли вы о том, чтобы поддержать мой ответ, поскольку моя логика явно используется в обоих решениях? – stroz

+0

Продвижение ... Великие умы думают одинаково. :-) Мы должны оба получить кредит. – JME