teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

調整

2019/01/21 01:03

投稿

yambejp
yambejp

スコア117914

answer CHANGED
@@ -59,4 +59,24 @@
59
59
  </article>
60
60
  </main>
61
61
  ```
62
- timerIdは別の処理と競合するのでターゲットの数だけ用意しておきます
62
+ timerIdは別の処理と競合するのでターゲットの数だけ用意しておきます
63
+
64
+ # 追記
65
+ よく考えたらarticleにhoverをかませばいいのでは?
66
+ ```CSS
67
+ <style>
68
+ .menu{display:none}
69
+ article:hover>.name+.menu{display:block}
70
+ </style>
71
+
72
+ <main>
73
+ <article>
74
+ <div class="name"><p>jon</p></div>
75
+ <div class="menu">jonのmenu</div>
76
+ </article>
77
+ <article>
78
+ <div class="name"><p>smith</p></div>
79
+ <div class="menu">smithのmenu</div>
80
+ </article>
81
+ </main>
82
+ ```

1

sample

2019/01/21 01:03

投稿

yambejp
yambejp

スコア117914

answer CHANGED
@@ -5,4 +5,58 @@
5
5
  どうしても構造が変えられないならnameのmouseoutイベント時に
6
6
  settimeoutなどで一定期間待機させmenuにmouseoverしたら
7
7
  menuを非表示にする処理をキャンセルする
8
- もちろんその場合menuのmouseout処理が別途必要
8
+ もちろんその場合menuのmouseout処理が別途必要
9
+
10
+ # sample
11
+
12
+ ```javascript
13
+ <style>
14
+ article{background-Color:aqua}
15
+ .name p{background-Color:yellow;width:200px;}
16
+ .menu{background-Color:lime;width:200px;}
17
+ </style>
18
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
19
+ <script>
20
+ $(function(){
21
+ var timerId=Array($('.name p').length).fill(null);
22
+ $('.name p').on('mouseover',function(){
23
+ var idx=$('.name p').index(this);
24
+ clearTimeout(timerId[idx]);
25
+ $('.menu').eq(idx).slideDown();
26
+ }).on('mouseout',function(){
27
+ var idx=$('.name p').index(this);
28
+ timerId[idx]=setTimeout(function(){
29
+ $('.menu').eq(idx).slideUp();
30
+ },100);
31
+ });
32
+ $('.menu').on('mouseover',function(){
33
+ var idx=$('.menu').index(this);
34
+ clearTimeout(timerId[idx]);
35
+ }).on('mouseout',function(){
36
+ var idx=$('.menu').index(this);
37
+ timerId[idx]=setTimeout(function(){
38
+ $('.menu').eq(idx).slideUp();
39
+ },100);
40
+ });
41
+ });
42
+ </script>
43
+ <main>
44
+ <article>
45
+ <div class="name"><p>aaa</p></div>
46
+ <div class="menu" style="display:none">aaaのmenu</div>
47
+ </article>
48
+ <article>
49
+ <div class="name"><p>bbb</p></div>
50
+ <div class="menu" style="display:none">bbbのmenu</div>
51
+ </article>
52
+ <article>
53
+ <div class="name"><p>ccc</p></div>
54
+ <div class="menu" style="display:none">cccのmenu</div>
55
+ </article>
56
+ <article>
57
+ <div class="name"><p>ddd</p></div>
58
+ <div class="menu" style="display:none">dddのmenu</div>
59
+ </article>
60
+ </main>
61
+ ```
62
+ timerIdは別の処理と競合するのでターゲットの数だけ用意しておきます