From 99e929b86d2482b7b44ee4bf0347be1f715eab4c Mon Sep 17 00:00:00 2001 From: Max Lynch Date: Tue, 3 Dec 2013 10:56:50 -0600 Subject: [PATCH] Side menu drag fix --- dist/js/ionic-angular.js | 19 ++++++++++++++++--- dist/js/ionic.js | 5 ++++- js/ext/angular/src/directive/ionicSideMenu.js | 19 ++++++++++++++++--- js/ext/angular/test/sideMenu.html | 6 +++--- js/views/scrollZyng.js | 5 ++++- 5 files changed, 43 insertions(+), 11 deletions(-) diff --git a/dist/js/ionic-angular.js b/dist/js/ionic-angular.js index 26b8ac5096..e2a6a8ca86 100644 --- a/dist/js/ionic-angular.js +++ b/dist/js/ionic-angular.js @@ -1865,6 +1865,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) $element.addClass('menu-content'); var defaultPrevented = false; + var isDragging = false; ionic.on('mousedown', function(e) { // If the child element prevented the drag, don't drag @@ -1875,15 +1876,25 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) if(defaultPrevented) { return; } + isDragging = true; sideMenuCtrl._handleDrag(e); e.gesture.srcEvent.preventDefault(); }; + var dragVertFn = function(e) { + if(isDragging) { + e.gesture.srcEvent.preventDefault(); + } + }; + //var dragGesture = Gesture.on('drag', dragFn, $element); var dragRightGesture = Gesture.on('dragright', dragFn, $element); var dragLeftGesture = Gesture.on('dragleft', dragFn, $element); + var dragUpGesture = Gesture.on('dragup', dragVertFn, $element); + var dragDownGesture = Gesture.on('dragdown', dragVertFn, $element); var dragReleaseFn = function(e) { + isDragging = false; if(!defaultPrevented) { sideMenuCtrl._endDrag(e); } @@ -1916,8 +1927,10 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) // Cleanup $scope.$on('$destroy', function() { - Gesture.off(dragLeftGesture, 'drag', dragFn); - Gesture.off(dragRightGesture, 'drag', dragFn); + Gesture.off(dragLeftGesture, 'dragleft', dragFn); + Gesture.off(dragRightGesture, 'dragright', dragFn); + Gesture.off(dragUpGesture, 'dragup', dragFn); + Gesture.off(dragDownGesture, 'dragdown', dragFn); Gesture.off(releaseGesture, 'release', dragReleaseFn); }); }; @@ -1933,7 +1946,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) replace: true, transclude: true, scope: true, - template: '', + template: '', compile: function(element, attr, transclude) { return function($scope, $element, $attr, sideMenuCtrl) { $scope.side = $attr.side; diff --git a/dist/js/ionic.js b/dist/js/ionic.js index d880a1d04f..875c1f2207 100644 --- a/dist/js/ionic.js +++ b/dist/js/ionic.js @@ -3362,6 +3362,9 @@ var Scroller; }, false); document.addEventListener("touchmove", function(e) { + if(e.defaultPrevented) { + return; + } self.doTouchMove(e.touches, e.timeStamp); }, false); @@ -3388,7 +3391,7 @@ var Scroller; }, false); document.addEventListener("mousemove", function(e) { - if (!mousedown) { + if (!mousedown || e.defaultPrevented) { return; } diff --git a/js/ext/angular/src/directive/ionicSideMenu.js b/js/ext/angular/src/directive/ionicSideMenu.js index cf19716739..90226e9b01 100644 --- a/js/ext/angular/src/directive/ionicSideMenu.js +++ b/js/ext/angular/src/directive/ionicSideMenu.js @@ -57,6 +57,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) $element.addClass('menu-content'); var defaultPrevented = false; + var isDragging = false; ionic.on('mousedown', function(e) { // If the child element prevented the drag, don't drag @@ -67,15 +68,25 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) if(defaultPrevented) { return; } + isDragging = true; sideMenuCtrl._handleDrag(e); e.gesture.srcEvent.preventDefault(); }; + var dragVertFn = function(e) { + if(isDragging) { + e.gesture.srcEvent.preventDefault(); + } + }; + //var dragGesture = Gesture.on('drag', dragFn, $element); var dragRightGesture = Gesture.on('dragright', dragFn, $element); var dragLeftGesture = Gesture.on('dragleft', dragFn, $element); + var dragUpGesture = Gesture.on('dragup', dragVertFn, $element); + var dragDownGesture = Gesture.on('dragdown', dragVertFn, $element); var dragReleaseFn = function(e) { + isDragging = false; if(!defaultPrevented) { sideMenuCtrl._endDrag(e); } @@ -108,8 +119,10 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) // Cleanup $scope.$on('$destroy', function() { - Gesture.off(dragLeftGesture, 'drag', dragFn); - Gesture.off(dragRightGesture, 'drag', dragFn); + Gesture.off(dragLeftGesture, 'dragleft', dragFn); + Gesture.off(dragRightGesture, 'dragright', dragFn); + Gesture.off(dragUpGesture, 'dragup', dragFn); + Gesture.off(dragDownGesture, 'dragdown', dragFn); Gesture.off(releaseGesture, 'release', dragReleaseFn); }); }; @@ -125,7 +138,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) replace: true, transclude: true, scope: true, - template: '', + template: '', compile: function(element, attr, transclude) { return function($scope, $element, $attr, sideMenuCtrl) { $scope.side = $attr.side; diff --git a/js/ext/angular/test/sideMenu.html b/js/ext/angular/test/sideMenu.html index f987e9de1f..27b84e847e 100644 --- a/js/ext/angular/test/sideMenu.html +++ b/js/ext/angular/test/sideMenu.html @@ -23,7 +23,7 @@

Slide me

- +

Content

@@ -31,7 +31,7 @@

Left

- +