removeEventListenerの必要性

このQ&Aのポイント
  • JavaScriptのソースコードで、mousemoveのイベントリスナーを削除している理由はメモリリークの防止です。
  • 削除されたイベントリスナーは、不要なメモリを占有する可能性があります。
  • また、残像が描かれて残って消えるようなプログラムでは、mousemoveのイベントは必要なくなるため、削除することでパフォーマンスの向上が期待できます。
回答を見る
  • ベストアンサー

removeEventListenerの必要性

参考にしているJavaScriptのソースで下記のような部分があったのですが、 (画面に描画をするプログラムの一部です。動きとしてはマウスの動きに合わせて模様が描かれて残像が残って消えていきます。) j(b)関数の中の一行目でdocument.removeEventListener("mousemove", j, !1); としてmousemoveのイベントリスナーを削除しているのが何故なのか解らず困っています。 メモリリークが発生するとかそういう問題なのでしょうか? ----------------------------------------------------------------------- <script type="text/javascript"> (function() { function j(b) { document.removeEventListener("mousemove", j, !1); document.removeEventListener("touchstart", j, !1); y(b); var g = l - p * 0.5, f = m - q * 0.5, a = Math.sqrt(g * g + f * f), b = l + g / a * 150, a = m + f / a * 150, g = Math.atan2(f, g); g += Math.PI * (0.5 + Math.random() * 0.5) * (Math.random() > 0.5 ? 1 : -1); for (f = 0; f < z; f++) { for (var e = A[f].f, c = 0; c < r; c++) { var d = e[c], h = Math.PI * 0.15 / r * c + g, k = Math.cos(h) * (r - c) * 2, h = Math.sin(h) * (r - c) * 2; d.x = b; d.y = a; d.d = k; d.e = h } j = !1 } document.addEventListener("mousemove", y, !1); document.addEventListener("touchmove", y, !1); document.addEventListener("touchstart", K, !1); setInterval(L, 1E3 / 30) } ------------------------------------------------------------------------- 同じソースの中で window.onload = function(){ ・・・   document.addEventListener("mousemove", j, !1); というようにイベントリスナーに登録しているところは見つかったので、これを削除しているのかとは思うのですが、 何分未熟なもので、それがどういう意図によるものなのか理解できません。 どなたか、知恵を貸して頂けないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • 23468
  • ベストアンサー率66% (6/9)
回答No.1

y とか K とか L が何をしてるかがわからないんで何とも言えないですけど、 onload時にはj、その後にはyがmousemoveのイベントリスナにあてられてるってことは、 j が初期設定をするfunctionで、 yがその後の動作に関するfunctionなのではないかなと思います。 初期設定を何度もやり直されたら困る、ってことでremoveEventしてるのではないでしょうか。

関連するQ&A

  • JavaScriptの配列について

    var old_array = Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); var new_array = Array('b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); のような配列があり、 abcと入力するとbcd DEFと入力するとEFG 012と入力すると!23 というようなものを作りたいのですがどうすればいいでしょうか。

  • 色変換のライブラリ探してます

    PHPでHSBまたはHSLからhexの色の値を出せるライブラリとかを探してます HSBまたはHSLから一方通行の変換だけできれば十分です また、なければ前にAS3で書いたのを 転用しようかと思ってるんですが とくになんの資料もなくテキトーに こうすればいけんじゃね?的に作ったものなので いろいろ不安です、ムダな処理とか そもそもHSBについて基本的に間違ってるとことか あったら指摘ください public static function HSBClr(H:Number,S:Number,B:Number):int { var H=Math.abs(H%360)/60; while(H<0)H+=6 var S=Math.min(Math.abs(S),100)/100 var B=Math.min(Math.abs(B),100)/100 var rtn:int=0x010101*Math.floor(B*(1-S)*255); var c=255*S*B; var r:int=0; var g:int=0; var b:int=0; if (H<1) { r=Math.floor(c); g=Math.floor(c*H); } else if (H<2) { r=Math.floor(c*(1-H%1)); g=Math.floor(c); } else if (H<3) { g=Math.floor(c); b=Math.floor(c*(H%1)); } else if (H<4) { g=Math.floor(c*(1-H%1)); b=Math.floor(c); } else if (H<5) { b=Math.floor(c); r=Math.floor(c*(H%1)); } else { b=Math.floor(c*(1-H%1)); r=Math.floor(c); } rtn+=r*0x010000+g*0x0100+b; return rtn; }

    • ベストアンサー
    • PHP
  • excel 関数作成の簡素化 ?

    A B C D E F G H I J 1784 1784 1781 1782 1809 1813 1821 1813 1784 1784 (1)A-B B-C C-D D-E E-F F-G G-H H-I I-J (1)0 3 -1 -27 -4 -8 8 29 0 (2)=SUMIF(A:I,">0",A:I) で 40になる 上記の(1)を使用せず (2)のように一気に出来ないか? もしも 表示が悪ければ 書き直し する為 回答不要

  • 2つエクセルデータを比較し、必要な情報を抽出する方法は?

    sheet1        sheet2      sheet3 19000001 a    19000001 a   19000001 aa 19000001 aa   19000002 b    19000005 ee 19000002 b    19000003 c 19000003 c    19000004 d 19000004 d    19000005 e 19000005 e    19000006 f 19000005 ee   19000007 g 19000006 f    19000008 h 19000007 g    19000009 i 19000008 h    19000010 j 19000009 i    19000011 k 19000010 j    19000012 l 19000011 k 19000012 l sheet1にあるデータから sheet2にはないデータをsheet3に抜き出したい できるだけ簡単な方法を教えてください

  • VBA

    1 a;b;c;d; 2 e;f;g;h; 3 i;j;k;l; をVBAで   1 a;   2 e;   3 i;   1 b;   2 f;    3 j;   1 c;   2 g;   3 k;   1 d;   2 h;   3 l; としたいのですが、どうしたらいいですか?

  • いきなりこんなメールが来ました。

    知らないアドレスからYahoo!メールに来ました。文字化けなのは分かってますが、解読お願いします。 $B$&$A$H$*A0$N7hDjE*$J0c$$65$($F$"$2$h$&$+!)(B $B$^$:$&$A$o0&>p$K52$($F$J$$(B $B$b$&9%$-$8$c$J$$(B $BNd$a$?$C$F8@$C$F$k?M$K$7$D$3$/$D$-$^$H$o$J$$(B $B%9%H!<%+!<$7$?$3$H$J$$(B $B$&$A$o$*A0$h$j$+$o$5$C$Q$j$7$F$k$N$H:,@-$=$3$^$GIe$C$F$J$$(B $B<+J,$G$I$s$@$1$&$A$KEEOC$7$F$k$+J,$+$C$F$k$h$M(B $BL@:Y=q<h$j4s$;$k;~$,K\Ev3Z$7$_$@$h(B?? $B$&$A$*A0$,$7$D$3$$$;$$$GK\EvF,$*$+$7$/$J$j$=$&$@$h:#(B $B$3$N2?=54V$^$B$GBQ$($k$N$D$i$+$C$?$7K\Ev:#$^$G$G0lHV$N@:?@E*6lDK$rL#$ &$A$,(B $B$&$A$,$I$s$@$1$D$i$$;W$$$7$F2fK}$7$F$?$+9M$($?J}$,$$$$$h(B $B$I$s$@$1@:?@E*$K6l$7$$;W$$$7$?9M$($?J}$,$$$$$h(B $B9%$-$J?M$K$=$3$^$GDI$$5M$a$?<+J,$,$d$C$F$-$?$3$H$H$+:#$7$F$k$3$H(B $B$"$H$3$N@hHo32FO$1=P$7$?8e?'!9$H$*6b$NOC$7$bMm$s$G$/$k$H;W$&$1$I?F9'9T$7$?$$$s$8$c$J$+$C$?!)<+J,$,$d$C$F$-$?$3$H$G$$$/$iBg?M$K$J$C$F$h$&$,>/$J$+$i$:2HB2$K$o>/$7$G$bLBOG$+$+$k$C$F9M$($F9TF0$7$?J}$,$$$$$h?F9'9T$7$?$$$J$i(B $BJa$^$k$J$s$F$b$C$F$N$[$+$@$+$i$M(B $B$^$!$H$K$+$/$&$A$

    • ベストアンサー
    • HTML
  • f(x)+g(y)+h(z)=C それぞれ定数

    f(x)+g(y)+h(z)=C (C:定数) が任意のx,y,zに対して成立するとき、f(x),g(y),h(z)はそれぞれ定数であることを示し、 それらの3つの定数の間の満たすべき関係式を求めよ。 という問題があるのですが、自分は 定数a,b,cについて、f(a),g(b),h(c)はそれぞれ定数となる。 f(x)+g(y)+h(z)=Cが任意のx,y,zに対して成立するので、 f(x)=C-g(b)-h(c) g(y)=C-h(c)-f(a) h(z)=C-f(a)-g(b) も成立するので、f(x),g(y),h(z)はそれぞれ定数である。 さらにこれらの辺々を加えると、 f(x)+g(y)+h(z)=3C-2(f(a)+g(b)+h(c)) となる。 という回答を考えたのですが、これでいいのでしょうか? よろしくお願いします。

  • JavaScriptの文字のエンコードについて

    フォームの入力欄で、「'」(シングルクォート)を入力してサブミットすると、ブラウザ(Firefox3.5)で見ると「'」と表示されていますが、ブラウザのソースを見るとvalueの¥ところには、「'」と表示されています。 これは、PHPでエンコードされているせいなのですが、 PHPでエンコードされた「'」を、JavaScriptを使って、ブラウザからソースを見たときに「'」と表示できるでしょうか? ソースは、こんな感じで書いたのですが、動作しませんでした........。 function chChar(){ var keyValue = document.getElementById("delete_key").value; var ascii = new Array(' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'); var htmlChar = new Array(' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'); var re = new RegExp(htmlChar); if(keyValue.match(re)){ for(i=0; i<ascii.length; i++){ keyValue = keyValue.replace(htmlChar[i], ascii[i]); } } return keyValue; }

  • C言語の配列の使い方について質問です。

    以下のプログラムを配列を使って見やすくしたいのですが、どのように作ったら良いでしょうか? 宜しくお願いします。 #include<stdio.h> int main(void) { int a, b, c, d, e, f, g, h, i, j, k, l, m ,n, o; /*5段目の処理*/ for(a = 1; a <= 15; a++) { for(b = 1; b <= 15; b++) { if(a == b) continue; for(c = 1; c <= 15; c++) { if(a == c || b == c) continue; for(d = 1; d <= 15; d++) { if(a == d || b == d || c == d) continue; for(e = 1; e <= 15; e++) { if(a == e || b == e || c == e || d == e) continue; // printf("%d %d %d %d %d\n", a, b, c, d, e); ////4段目//// if(a>b){ f=a-b; } else if(a<b){ f=b-a; } if(b>c){ g=b-c; } else if(b<c){ g=c-b; } if(c>d){ h=c-d; } else if(c<d){ h=d-c; } if(d>e){ i=d-e; } else if(e<d){ i=e-d; } // printf(" %d %d %d %d \n", f, g, h, i); /////3段目//// if(f>g){ j=f-g; } else if(f<g){ j=g-f; } if(g>h){ k=g-h; } else if(g<h){ k=h-g; } if(h>i){ l=h-i; } else if(h<i){ l=i-h; } // printf(" %d %d %d \n", j, k, l); /////2段目//// if(j>k){ m=j-k; } else if(j<k){ m=k-j; } if(k>l){ n=k-l; } else if(k<l){ n=l-k; } // printf(" %d %d \n", m, n); /////三段目///// if(m>n){ o=m-n; } else if(m<n){ o=n-m; } // printf(" %d \n", o); if(a != b != c != d != e != f != g != h != i != j != k != l != m != n != o){ printf("%d %d %d %d %d\n", a, b, c, d, e); printf(" %d %d %d %d \n", f, g, h, i); printf(" %d %d %d \n", j, k, l); printf(" %d %d \n", m, n); printf(" %d \n", o); } } } } } } }

  • Excelに関する質問です。

    Excelで x 1 2 3 4 5 6 7 8 9 y a b c d e f g h i と各セルに横に打ち込んだところを x y 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i と縦に打ち直したいのですが何か一発で変換できる方法ってありますか?

専門家に質問してみよう