Javascriptについて以下のソースを見てください。
このソースで受信フォルダにマウスを持っていくとしたのhiddenになっているところが表示され、マウスを離すと、また消える処理は成功しました。
今度はテーブルでhiddenになっているところにカーソルを合わせると表示し離すと非表示になるようにしたいのですがうまくいきません。回答お願いいたします。
HTML
1<!DOCTYPE html>
2<html>
3<head>
4<meta charset="UTF-8">
5<title>Insert title here</title>
6</head>
7<body>
8<table border="1" style="border-collapse: collapse;">
9<tr><td>MENU</td><td id="a1">受信フォルダ</td><td>送信フォルダ</td><td>削除フォルダ</td></tr>
10<tr><td></td><td id="b1" style="visibility: hidden;" >・メール表示<br/>・削除</td><td style="visibility: hidden;">・メール表示<br/>・削除</td><td style="visibility: hidden;">・・メール表示<br/>・削除</td></tr>
11<tr><td colspan="4"></td></tr>
12</table>
13<script type="text/javascript">
14var a1Element = document.getElementById('a1');
15var b1Element = document.getElementById('b1');
16a1Element.addEventListener('mousemove',func1,false);
17a1Element.addEventListener('mouseout',func2,false);
18b1Element.addEventListener('mousemove',func1,false);
19b1Element.addEventListener('mouseout',func2,false);
20function func1(){
21 b1Element.setAttribute("style", "visibility:visible;");
22}
23function func2(){
24 b1Element.setAttribute("style", "visibility: hidden;");
25}
26</script>
27</body>
28</html>
[受信フォルダ] 以外も表示するようにしてみましたが、どうでしょう。
event.target
, event.relatedTarget
の扱いを覚えるとコードの幅が広がります。
jsfiddleにサンプルコードをUP済。
HTML
1<style>
2table {
3 border-collapse: collapse;
4}
5
6td, th {
7 border: solid 1px black;
8}
9
10.mail-body>[aria-hidden=true] {
11 visibility: hidden;
12}
13</style>
14</head>
15<body>
16<table id="sample">
17 <thead>
18 <tr>
19 <th>MENU</td>
20 <th class="mail-header">受信フォルダ</td>
21 <th class="mail-header">送信フォルダ</td>
22 <th class="mail-header">削除フォルダ</td>
23 </tr>
24 <thead>
25 <tbody>
26 <tr>
27 <td></td>
28 <td class="mail-body"><span aria-hidden="true">・メール表示<br />・削除</span></td>
29 <td class="mail-body"><span aria-hidden="true">・メール表示<br />・削除</span></td>
30 <td class="mail-body"><span aria-hidden="true">・メール表示<br />・削除</span></td>
31 </tr>
32 <tr>
33 <td colspan="4"></td>
34 </tr>
35 </tbody>
36</table>
37
38<script type="text/javascript">
39'use strict';
40(function () {
41 function handleMouseoverout (event) {
42 switch (event.type) {
43 case 'mouseover':
44 var td = event.target,
45 classList = td.classList;
46
47 if (classList.contains('mail-header')) {
48 td.parentNode.parentNode.parentNode.tBodies[0].rows[0].cells[td.cellIndex].firstChild.setAttribute('aria-hidden', 'false');
49 } else if (classList.contains('mail-body')) {
50 td.firstChild.setAttribute('aria-hidden', 'false');
51 }
52 break;
53 case 'mouseout':
54 var td = event.target;
55 if (!td.classList.contains('mail-body') || td !== event.relatedTarget.parentNode) {
56 for (var i = 0, span = event.currentTarget.querySelectorAll('[aria-hidden=false]'), l = span.length; i < l; ++i) {
57 span[i].setAttribute('aria-hidden', 'true');
58 }
59 }
60 break;
61 }
62 }
63
64 function init () {
65 var table = document.getElementById('sample');
66
67 table.addEventListener('mouseover', handleMouseoverout, false);
68 table.addEventListener('mouseout', handleMouseoverout, false);
69 }
70
71 init();
72}());
73</script>