changeset 3072:2dcf6aaa7c4c

Potential fix for #122
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Tue, 31 Oct 2017 22:18:29 +0000
parents afb1de9be046
children 87b3657abce7
files interfaces/ape.js
diffstat 1 files changed, 33 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/interfaces/ape.js	Tue Oct 31 22:07:53 2017 +0000
+++ b/interfaces/ape.js	Tue Oct 31 22:18:29 2017 +0000
@@ -331,9 +331,6 @@
             this.enable = function () {
                 trackObj.addEventListener("mousedown", this);
                 trackObj.addEventListener("mouseup", this);
-                trackObj.addEventListener("touchstart", this);
-                trackObj.addEventListener("touchend", this);
-                trackObj.addEventListener("touchcancel", this);
                 trackObj.classList.remove("track-slider-disabled");
                 labelHolder.textContent = label;
             }
@@ -350,10 +347,6 @@
                 trackObj.classList.add("error-colour");
                 trackObj.removeEventListener("mousedown");
                 trackObj.removeEventListener("mouseup");
-                trackObj.removeEventListener("touchstart");
-                trackObj.removeEventListener("touchmove");
-                trackObj.removeEventListener("touchend");
-                trackObj.removeEventListener("touchcancel");
             }
             var timing = undefined;
             this.handleEvent = function (e) {
@@ -361,14 +354,12 @@
                 if (e.preventDefault) {
                     e.preventDefault();
                 }
-                if (e.type == "mousedown" || e.type == "touchstart") {
+                if (e.type == "mousedown") {
                     axisInterface.mousedown(this);
                 } else if (e.type == "mouseup" || e.type == "touchend" || e.type == "touchcancel") {
                     axisInterface.mouseup(this);
                     metric.moved(audioEngineContext.timer.getTestTime(), this.value);
                     console.log("Slider " + label + " on axis " + axisInterface.name + " moved to " + this.value);
-                } else if (e.type == "touchmove") {
-                    //axisInterface.handleEvent(e);
                 }
             }
             this.clicked = function (e) {
@@ -570,6 +561,11 @@
             UI.startTime = undefined;
         }
         this.handleEvent = function (event) {
+            function getTargetSlider(target) {
+                return sliders.find(function (a) {
+                    return a.DOM == target;
+                });
+            }
             var time = audioEngineContext.timer.getTestTime();
             if (event.preventDefault) {
                 event.preventDefault();
@@ -577,6 +573,13 @@
             if (UI.selected === undefined) {
                 return;
             }
+            if (event.type == "touchstart") {
+                var selected = getTargetSlider(event.target);
+                if (typeof selected != "object") {
+                    return;
+                }
+                UI.selected = selected;
+            }
             if (event.type == "mousemove") {
                 var move = event.clientX - 6;
                 var w = $(sliderRail).width();
@@ -584,18 +587,24 @@
                 move = Math.min(w, move);
                 UI.selected.value = (move / w);
             } else if (event.type == "touchmove") {
-                var move;
-                if (event.targetTouches) {
-                    move = event.targetTouches[0].clientX - 6;
-                } else if (event.originalEvent.targetTouches) {
-                    move = event.originalEvent.targetTouches[0].clientX - 6;
-                } else {
-                    return;
+                if (UI.selected == getTargetSlider(event.target)) {
+                    var move;
+                    if (event.targetTouches) {
+                        move = event.targetTouches[0].clientX - 6;
+                    } else if (event.originalEvent.targetTouches) {
+                        move = event.originalEvent.targetTouches[0].clientX - 6;
+                    } else {
+                        return;
+                    }
+                    var w = $(event.currentTarget).width();
+                    move = Math.max(50, move);
+                    move = Math.min(w, move);
+                    UI.selected.value = (move / w);
                 }
-                var w = $(event.currentTarget).width();
-                move = Math.max(50, move);
-                move = Math.min(w, move);
-                UI.selected.value = (move / w);
+            } else if (event.type == "touchend" || event.type == "touchcancel") {
+                if (UI.selected == getTargetSlider(event.target)) {
+                    UI.selected.handleEvent(event);
+                }
             }
         }
         this.checkAllMoved = function () {
@@ -642,7 +651,10 @@
             return "";
         }
         sliderRail.addEventListener("mousemove", this);
+        sliderRail.addEventListener("touchstart", this);
         sliderRail.addEventListener("touchmove", this);
+        sliderRail.addEventListener("touchend", this);
+        sliderRail.addEventListener("touchcancel", this);
         Object.defineProperties(this, {
             "sliderRail": {
                 "value": sliderRail