Side menu drag fix

This commit is contained in:
Max Lynch
2013-12-03 10:56:50 -06:00
parent 373044cfd8
commit 99e929b86d
5 changed files with 43 additions and 11 deletions

View File

@@ -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: '<div class="menu menu-{{side}}"></div>',
template: '<div class="sub-pane menu menu-{{side}}"></div>',
compile: function(element, attr, transclude) {
return function($scope, $element, $attr, sideMenuCtrl) {
$scope.side = $attr.side;

5
dist/js/ionic.js vendored
View File

@@ -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;
}

View File

@@ -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: '<div class="menu menu-{{side}}"></div>',
template: '<div class="sub-pane menu menu-{{side}}"></div>',
compile: function(element, attr, transclude) {
return function($scope, $element, $attr, sideMenuCtrl) {
$scope.side = $attr.side;

View File

@@ -23,7 +23,7 @@
<button class="button button-icon" ng-click="openLeft()"><i class="icon ion-navicon"></i></button>
<h1 class="title">Slide me</h1>
</header>
<content has-header="true">
<content>
<h1>Content</h1>
</content>
</pane>
@@ -31,7 +31,7 @@
<header class="bar bar-header bar-assertive">
<h1 class="title">Left</h1>
</header>
<content has-header="true" overflow-scroll="true">
<content>
<ul class="list">
<a href="#" class="item" ng-repeat="item in list">
{{item.text}}
@@ -43,7 +43,7 @@
<header class="bar bar-header bar-assertive">
<h1 class="title">Right</h1>
</header>
<content has-header="true">
<content>
<ul class="list">
<a href="#" class="item" ng-repeat="item in list">
{{item.text}}

View File

@@ -528,6 +528,9 @@ var Scroller;
}, false);
document.addEventListener("touchmove", function(e) {
if(e.defaultPrevented) {
return;
}
self.doTouchMove(e.touches, e.timeStamp);
}, false);
@@ -554,7 +557,7 @@ var Scroller;
}, false);
document.addEventListener("mousemove", function(e) {
if (!mousedown) {
if (!mousedown || e.defaultPrevented) {
return;
}