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

質問編集履歴

1

誤字

2020/04/07 02:42

投稿

SendaSosuke
SendaSosuke

スコア5

title CHANGED
@@ -1,1 +1,1 @@
1
- 保存ボタンを押しらくっついてます
1
+ 二度目に訪れにはメモが出てこない
body CHANGED
@@ -1,101 +1,100 @@
1
1
  ### 前提・実現したいこと
2
2
  Chrome拡張機能でメモ機能を作ろうと思っています!
3
- 下のコードでできるメモ機能ですが、メモの黒い部分をクリックするとスムーズにドラッグ&ドロップができますが、保存ボタンを押したらカーソルに合わせて引っ付いてきます(二回クリックすると離れます)。
4
- それを直したいです!
5
- コードの悪いところを教えてください!
6
3
 
4
+ しかし一度メモを使ったページでは、リロードしたり再訪したときにメモが出てこなくなります。
7
5
 
8
6
  ```Javascript
7
+
9
8
  const save = (content) => {//save(textbox.value)
10
- chrome.runtime.sendMessage(content, res => {
9
+ chrome.runtime.sendMessage(content, res => {
11
- console.log(res);
10
+ console.log(res);
12
- });
11
+ });
13
12
  };
14
13
  chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
15
- const modalfrm = document.getElementById('ex-memo');
16
- if (modalfrm != null) return;
17
- const modal = document.createElement('div');
18
- modal.id = 'ex-memo';
19
- // modal.style.width = '500px';
20
- // modal.style.height = '100px';
21
- modal.style.zIndex = '2147483647';
22
- modal.style.position = 'fixed';
23
- modal.style.left = `${message.posX}px`;
24
- modal.style.top = `${message.posY}px`;
25
- console.log("modal.style.left:" + modal.style.left);
26
- console.log("modal.style.top:" + modal.style.top);
27
- console.log("modal.style.width:" + modal.style.width);
28
- console.log("modal.style.height:" + modal.style.height);
29
- const textbox = document.createElement('textarea');
30
- textbox.style.width = '600px';
31
- textbox.style.height = '200px';
32
- textbox.style.backgroundColor = 'rgb(67, 67, 67)';
33
- textbox.style.color = 'rgb(51, 166, 184)';
34
- textbox.value= message.content;
35
- modal.appendChild(textbox);
36
- const saveButton = document.createElement('button');
37
- saveButton.onclick = () => save(textbox.value);
38
- saveButton.innerText = '保存';
39
- modal.appendChild(saveButton);
40
- document.body.appendChild(modal);
41
- console.log("function");
42
- modal.addEventListener('mousedown', mdown);
43
- modal.addEventListener('touchstart', mdown);
44
- // "マウスが押された際の関数"
45
- function mdown(e){
46
- console.log("mdown");
47
- this.classList.add("drag");
48
- //タッチデイベントとマウスのイベントの差異を吸収
49
- if(e.type === "mousedown") {
50
- var event = e;
51
- } else {
52
- var event = e.changedTouches[0];
53
- }
54
- //要素内の相対座標を取得
55
- posX = event.pageX - this.offsetLeft;
56
- posY = event.pageY - this.offsetTop;
57
- //ムーブイベントにコールバック
58
- document.body.addEventListener("mousemove", mmove);
59
- document.body.addEventListener("touchmove", mmove);
60
- }
61
- // "マウスカーソルが動いたときに発火"
62
- function mmove(e){
63
- console.log("mmove");
64
- //ドラグしている要素取得
65
- var drag = document.getElementsByClassName("drag")[0];
66
- //同様にマウスとタッチの差異を吸収
67
- if(e.type === "mousemove") {
68
- var event = e;
69
- } else {
70
- var event = e.changedTouches[0];
71
- }
72
- //フリックしとき画面を動かさないようにデフォルト動作を抑制
73
- e.preventDefault();
74
- //マウスが動いた場所に要素を動かす
75
- drag.style.top = event.pageY - posY + "px";
76
- drag.style.left = event.pageX - posX + "px";
77
- //マウスボタンが離されたとき、またはカーソルが外れたとき発火
78
- drag.addEventListener("mouseup", mup);
79
- document.body.addEventListener("mouseleave", mup);
80
- drag.addEventListener("touchend", mup);
81
- document.body.addEventListener("touchleave", mup);
82
- }
83
- // "マウスボタンが上がったら発火"
84
- function mup(e){
85
- console.log("mup");
86
- var drag = document.getElementsByClassName("drag")[0];
87
- //ムーブベントハンドラの消去
88
- document.body.removeEventListener("mousemove", mmove);
89
- drag.removeEventListener("mouseup", mup);
90
- document.body.removeEventListener("touchmove", mmove);
91
- drag.removeEventListener("touchend", mup);
92
- //クラス名 .drag も消す
93
- drag.classList.remove("drag");
94
- }
14
+ const modalfrm = document.getElementById('ex-memo');
15
+ if (modalfrm != null) return;
16
+ const modal = document.createElement('div');
17
+ modal.id = 'ex-memo';
18
+ modal.style.zIndex = '2147483647';
19
+ modal.style.position = 'fixed';
20
+ modal.style.left = `${message.posX}px`;
21
+ modal.style.top = `${message.posY}px`;
22
+ console.log("modal.style.left:" + modal.style.left);
23
+ console.log("modal.style.top:" + modal.style.top);
24
+ console.log("modal.style.width:" + modal.style.width);
25
+ console.log("modal.style.height:" + modal.style.height);
26
+ const textbox = document.createElement('textarea');
27
+ textbox.style.width = '600px';
28
+ textbox.style.height = '200px';
29
+ textbox.style.backgroundColor = 'rgb(67, 67, 67)';
30
+ textbox.style.color = 'rgb(51, 166, 184)';
31
+ textbox.value= message.content;
32
+ modal.appendChild(textbox);
33
+ const saveButton = document.createElement('button');
34
+ saveButton.onclick = () => save(textbox.value);
35
+ saveButton.innerText = '保存';
36
+ modal.appendChild(saveButton);
37
+ document.body.appendChild(modal);
38
+ console.log("function");
39
+ modal.addEventListener('mousedown', mdown);
40
+ modal.addEventListener('touchstart', mdown);
41
+ // "マウスが押された際の関数"
42
+ function mdown(e){
43
+ console.log("mdown");
44
+ this.classList.add("drag");
45
+ //タッチドイベントとマウスのイベントの差異を吸収
46
+ if(e.type === "mousedown") {
47
+ var event = e;
48
+ } else {
49
+ var event = e.changedTouches[0];
50
+ }
51
+ //要素内の相対座標を取得
52
+ posX = event.pageX - this.offsetLeft;
53
+ posY = event.pageY - this.offsetTop;
54
+ //ムーブイベントにコールバック
55
+ document.body.addEventListener("mousemove", mmove);
56
+ document.body.addEventListener("touchmove", mmove);
57
+ }
58
+ // "マウスカーソルが動いたときに発火"
59
+ function mmove(e){
60
+ console.log("mmove");
61
+ //ドラッグしている要素を取得
62
+  var drag = document.getElementsByClassName("drag")[0];
63
+ //同様にマウスとタチの差異吸収
64
+ if(e.type === "mousemove") {
65
+ var event = e;
66
+ } else {
67
+ var event = e.changedTouches[0];
68
+ }
69
+ //フリックしたときに画面を動かさないようにデフォルト動作を抑制
70
+ e.preventDefault();
71
+ //マウスが動い場所要素を動か
72
+ drag.style.top = event.pageY - posY + "px";
73
+ drag.style.left = event.pageX - posX + "px";
74
+ //マウスボタンが離されたとき、またはカーソルが外れたとき発火
75
+ drag.addEventListener("mouseup", mup);
76
+ document.body.addEventListener("mouseleave", mup);
77
+ drag.addEventListener("touchend", mup);
78
+ document.body.addEventListener("touchleave", mup);
79
+
80
+ // "マウスボタンが上がったら発火"
81
+ function mup(e){
82
+ console.log("mup");
83
+ var drag = document.getElementsByClassName("drag")[0];
84
+ //ムーブベントハンドラの消去
85
+ document.body.removeEventListener("mousemove", mmove);
86
+ drag.removeEventListener("mouseup", mup);
87
+ document.body.removeEventListener("touchmove", mmove);
88
+ drag.removeEventListener("touchend", mup);
89
+ //クラス名 .drag も消す
90
+ drag.classList.remove("drag");
91
+ }
92
+ }
95
93
  });
94
+
96
95
  ```
97
96
  ### エラー
98
- カッコを入れて数えて下から7番目の「drag.removeEventListener("mouseup", mup);」でエラーになっています
97
+ カッコを入れて数えて下から8番目の「drag.removeEventListener("mouseup", mup);」でエラーになっています
99
98
 
100
99
  ```
101
100
  Uncaught TypeError: Cannot read property ‘removeEventListener’ of undefined