質問編集履歴
1
ソースコードの追加および内容を簡単に追記しました
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -1,4 +1,95 @@ | |
| 1 1 | 
             
            JavaScriptで同じ要素に対する「mousedown」「mouseup」と「click」のイベントリスナにそれぞれ別の処理を実施したいです。
         | 
| 2 2 | 
             
            preventDefault()やstopImmediatePropagation()ではイベントの伝藩を止められませんでした。
         | 
| 3 3 |  | 
| 4 | 
            -
            もし方法があるのであれば、ご教授いただきたいです。
         | 
| 4 | 
            +
            もし方法があるのであれば、ご教授いただきたいです。
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            失礼いたしました。追記になります。
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            下記ソースコードです。
         | 
| 9 | 
            +
            やりたいことは、要素をドラッグする場合はクリックイベントを発生させず、ドラッグをしない(要素自体をmousedown/mouseupしない=ドラッグしない)場合は、アラートを出したいです。
         | 
| 10 | 
            +
            removeEventlistenerを使って試してみましたが、再登録がうまくできず、一度ドラッグしてしまうと、アラート(clickイベント)が発生しなくなってしまいました。
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ```html
         | 
| 13 | 
            +
                <div class="drag-and-drop" id="red-box"></div>
         | 
| 14 | 
            +
                <div class="drag-and-drop" id="blue-box"></div>
         | 
| 15 | 
            +
                <div class="drag-and-drop" id="yellow-box"></div>
         | 
| 16 | 
            +
            ```
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            ```js
         | 
| 19 | 
            +
            const body = document.querySelector("body");
         | 
| 20 | 
            +
            body.addEventListener("click", hoge);
         | 
| 21 | 
            +
            function hoge(e) {
         | 
| 22 | 
            +
                alert("click");
         | 
| 23 | 
            +
            }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
             | 
| 26 | 
            +
            {
         | 
| 27 | 
            +
                var elements = document.getElementsByClassName("drag-and-drop");
         | 
| 28 | 
            +
                console.log(elements);
         | 
| 29 | 
            +
                var x;
         | 
| 30 | 
            +
                var y;
         | 
| 31 | 
            +
                var elem;
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                for (var i = 0; i < elements.length; i++) {
         | 
| 34 | 
            +
                    elements[i].addEventListener("mousedown", (e) => {
         | 
| 35 | 
            +
                       // body.removeEventListener("click", hoge);
         | 
| 36 | 
            +
                        e.stopImmediatePropagation();
         | 
| 37 | 
            +
                        e.preventDefault();
         | 
| 38 | 
            +
                        elem = e.target;
         | 
| 39 | 
            +
                        elem.classList.add("drag");
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                        if (e.type === "mousedown") {
         | 
| 42 | 
            +
                            // var event = event;
         | 
| 43 | 
            +
                        } else {
         | 
| 44 | 
            +
                            console.log(e.changedTouches[0]);
         | 
| 45 | 
            +
                            var e = e.changedTouches[0];
         | 
| 46 | 
            +
                        }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                        //要素内の相対座標を取得
         | 
| 49 | 
            +
                        console.log(elem.offsetLeft);
         | 
| 50 | 
            +
                        console.log(elem.offsetX);
         | 
| 51 | 
            +
                        console.log(e.pageX);
         | 
| 52 | 
            +
                        x = e.pageX - elem.offsetLeft;
         | 
| 53 | 
            +
                        console.log(x);
         | 
| 54 | 
            +
                        y = e.pageY - elem.offsetTop;
         | 
| 55 | 
            +
                        document.body.addEventListener("mousemove", mmove, false);
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                        e.stopImmediatePropagation();
         | 
| 58 | 
            +
                        e.preventDefault();
         | 
| 59 | 
            +
                    });
         | 
| 60 | 
            +
                }
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                function mmove(e) {
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    var drag = document.getElementsByClassName("drag")[0];
         | 
| 65 | 
            +
                    if (e.type === "mousemove") {
         | 
| 66 | 
            +
                        var event = e;
         | 
| 67 | 
            +
                    } else {
         | 
| 68 | 
            +
                        var event = e.changedTouches[0];
         | 
| 69 | 
            +
                    }
         | 
| 70 | 
            +
                    e.preventDefault();
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                    drag.style.top = event.pageY - y + "px";
         | 
| 73 | 
            +
                    drag.style.left = event.pageX - x + "px";
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                    drag.addEventListener("mouseup", mup, false);
         | 
| 76 | 
            +
                    document.body.addEventListener("mouseleave", mup, false);
         | 
| 77 | 
            +
                    drag.addEventListener("touchend", mup, false);
         | 
| 78 | 
            +
                    document.body.addEventListener("touchleave", mup, false);
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                }
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                function mup(e) {
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                    var drag = document.getElementsByClassName("drag")[0];
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    document.body.removeEventListener("mousemove", mmove, false);
         | 
| 87 | 
            +
                    drag.removeEventListener("mouseup", mup, false);
         | 
| 88 | 
            +
                    document.body.removeEventListener("touchmove", mmove, false);
         | 
| 89 | 
            +
                    drag.removeEventListener("touchend", mup, false);
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                    drag.classList.remove("drag");
         | 
| 92 | 
            +
                }
         | 
| 93 | 
            +
                body.addEventListener("click", hoge);
         | 
| 94 | 
            +
            }
         | 
| 95 | 
            +
            ```
         | 
