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

回答編集履歴

2

修正版

2017/05/19 05:08

投稿

yambejp
yambejp

スコア117902

answer CHANGED
@@ -55,4 +55,30 @@
55
55
  <div class="hoge" style="background-Color:yellow;">
56
56
  マウスをのせた3秒後に赤になる
57
57
  </div>
58
+ ```
59
+
60
+ # 修正版
61
+ ```ここに言語を入力
62
+ var timerId=[];
63
+ window.onload=function(){
64
+ var hoge=document.querySelectorAll('.hoge');
65
+ for(var i=0;i<hoge.length;i++){
66
+ hoge[i].setAttribute("data-hoge",i);
67
+ }
68
+ }
69
+ document.addEventListener("mouseover",function(e){myFunc(e)});
70
+ document.addEventListener("mouseout",function(e){myFunc(e)});
71
+ function myFunc(e){
72
+ var t=e.target;
73
+ if(num=t.getAttribute("data-hoge")){
74
+ if(e.type=="mouseover"){
75
+ timerId[num]=setTimeout(function(){
76
+ t.style.backgroundColor="red";
77
+ },3000);
78
+ }
79
+ if(e.type=="mouseout"){
80
+ clearTimeout(timerId[num]);
81
+ }
82
+ }
83
+ }
58
84
  ```

1

追記

2017/05/19 05:08

投稿

yambejp
yambejp

スコア117902

answer CHANGED
@@ -17,4 +17,42 @@
17
17
  onmouseout="myFunc(false)" style="background-Color:lime;">
18
18
  マウスをのせた3秒後に赤になる
19
19
  </div>
20
+ ```
21
+
22
+ # 追記
23
+ 複数のsetTimeoutを管理する場合、timerIdを配列してもてばよいでしょう
24
+
25
+ ```javascript
26
+ var timerId=[];
27
+ document.addEventListener("mouseover",function(e){myFunc(e)});
28
+ document.addEventListener("mouseout",function(e){myFunc(e)});
29
+ function myFunc(e){
30
+ var t=e.target;
31
+ var hoge=document.querySelectorAll('.hoge');
32
+ for(var i=0;i<hoge.length;i++){
33
+ if(t==hoge[i]){
34
+ if(e.type=="mouseover"){
35
+ timerId[i]=setTimeout(function(){
36
+ t.style.backgroundColor="red";
37
+ },3000);
38
+ }
39
+ if(e.type=="mouseout"){
40
+ clearTimeout(timerId[i]);
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ ```
47
+
48
+ ```HTML
49
+ <div class="hoge" style="background-Color:lime;">
50
+ マウスをのせた3秒後に赤になる
51
+ </div>
52
+ <div class="hoge" style="background-Color:aqua;">
53
+ マウスをのせた3秒後に赤になる
54
+ </div>
55
+ <div class="hoge" style="background-Color:yellow;">
56
+ マウスをのせた3秒後に赤になる
57
+ </div>
20
58
  ```