Skip to content

Commit 80f8b2d

Browse files
committed
Fix sliderview on Windows Phone devices
Successfully tested on browser, Windows Phone and Android. Still need to be tested on iOS. Could someone tell me if it's stil working fine on iOS?
1 parent 89c47c2 commit 80f8b2d

File tree

1 file changed

+48
-33
lines changed

1 file changed

+48
-33
lines changed

Diff for: js/views/sliderView.js

+48-33
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
*
44
* Brad Birdsall
55
* Copyright 2013, MIT License
6-
*
76
*/
87

98
(function(ionic) {
@@ -12,15 +11,33 @@
1211
ionic.views.Slider = ionic.views.View.inherit({
1312
initialize: function (options) {
1413
var slider = this;
15-
14+
15+
var touchStartEvent, touchMoveEvent, touchEndEvent;
16+
if (window.navigator.pointerEnabled) {
17+
touchStartEvent = 'pointerdown';
18+
touchMoveEvent = 'pointermove';
19+
touchEndEvent = 'pointerup';
20+
} else if (window.navigator.msPointerEnabled) {
21+
touchStartEvent = 'MSPointerDown';
22+
touchMoveEvent = 'MSPointerMove';
23+
touchEndEvent = 'MSPointerUp';
24+
} else {
25+
touchStartEvent = 'touchstart';
26+
touchMoveEvent = 'touchmove';
27+
touchEndEvent = 'touchend';
28+
}
29+
30+
var mouseStartEvent = 'mousedown';
31+
var mouseMoveEvent = 'mousemove';
32+
var mouseEndEvent = 'mouseup';
33+
1634
// utilities
1735
var noop = function() {}; // simple no operation function
1836
var offloadFn = function(fn) { setTimeout(fn || noop, 0); }; // offload a functions execution
1937

2038
// check browser capabilities
2139
var browser = {
2240
addEventListener: !!window.addEventListener,
23-
touch: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,
2441
transitions: (function(temp) {
2542
var props = ['transitionProperty', 'WebkitTransition', 'MozTransition', 'OTransition', 'msTransition'];
2643
for ( var i in props ) if (temp.style[ props[i] ] !== undefined) return true;
@@ -251,20 +268,20 @@ ionic.views.Slider = ionic.views.View.inherit({
251268
var events = {
252269

253270
handleEvent: function(event) {
254-
if(event.type == 'mousedown' || event.type == 'mouseup' || event.type == 'mousemove') {
271+
if(!event.touches && event.pageX && event.pageY) {
255272
event.touches = [{
256273
pageX: event.pageX,
257274
pageY: event.pageY
258275
}];
259276
}
260277

261278
switch (event.type) {
262-
case 'mousedown': this.start(event); break;
263-
case 'touchstart': this.start(event); break;
264-
case 'touchmove': this.touchmove(event); break;
265-
case 'mousemove': this.touchmove(event); break;
266-
case 'touchend': offloadFn(this.end(event)); break;
267-
case 'mouseup': offloadFn(this.end(event)); break;
279+
case touchStartEvent: this.start(event); break;
280+
case mouseStartEvent: this.start(event); break;
281+
case touchMoveEvent: this.touchmove(event); break;
282+
case mouseMoveEvent: this.touchmove(event); break;
283+
case touchEndEvent: offloadFn(this.end(event)); break;
284+
case mouseEndEvent: offloadFn(this.end(event)); break;
268285
case 'webkitTransitionEnd':
269286
case 'msTransitionEnd':
270287
case 'oTransitionEnd':
@@ -299,14 +316,14 @@ ionic.views.Slider = ionic.views.View.inherit({
299316
delta = {};
300317

301318
// attach touchmove and touchend listeners
302-
if(browser.touch) {
303-
element.addEventListener('touchmove', this, false);
304-
element.addEventListener('touchend', this, false);
305-
} else {
306-
element.addEventListener('mousemove', this, false);
307-
element.addEventListener('mouseup', this, false);
308-
document.addEventListener('mouseup', this, false);
309-
}
319+
element.addEventListener(touchMoveEvent, this, false);
320+
element.addEventListener(mouseMoveEvent, this, false);
321+
322+
element.addEventListener(touchEndEvent, this, false);
323+
element.addEventListener(mouseEndEvent, this, false);
324+
325+
document.addEventListener(touchEndEvent, this, false);
326+
document.addEventListener(mouseEndEvent, this, false);
310327
},
311328
touchmove: function(event) {
312329

@@ -448,15 +465,15 @@ ionic.views.Slider = ionic.views.View.inherit({
448465
}
449466

450467
// kill touchmove and touchend event listeners until touchstart called again
451-
if(browser.touch) {
452-
element.removeEventListener('touchmove', events, false);
453-
element.removeEventListener('touchend', events, false);
454-
} else {
455-
element.removeEventListener('mousemove', events, false);
456-
element.removeEventListener('mouseup', events, false);
457-
document.removeEventListener('mouseup', events, false);
458-
}
459-
468+
element.removeEventListener(touchMoveEvent, events, false);
469+
element.removeEventListener(mouseMoveEvent, events, false);
470+
471+
element.removeEventListener(touchEndEvent, events, false);
472+
element.removeEventListener(mouseEndEvent, events, false);
473+
474+
document.removeEventListener(touchEndEvent, events, false);
475+
document.removeEventListener(mouseEndEvent, events, false);
476+
460477
options.onDragEnd && options.onDragEnd();
461478
},
462479
transitionEnd: function(event) {
@@ -557,7 +574,8 @@ ionic.views.Slider = ionic.views.View.inherit({
557574
if (browser.addEventListener) {
558575

559576
// remove current event listeners
560-
element.removeEventListener('touchstart', events, false);
577+
element.removeEventListener(touchStartEvent, events, false);
578+
element.removeEventListener(mouseStartEvent, events, false);
561579
element.removeEventListener('webkitTransitionEnd', events, false);
562580
element.removeEventListener('msTransitionEnd', events, false);
563581
element.removeEventListener('oTransitionEnd', events, false);
@@ -585,11 +603,8 @@ ionic.views.Slider = ionic.views.View.inherit({
585603
if (browser.addEventListener) {
586604

587605
// set touchstart event on element
588-
if (browser.touch) {
589-
element.addEventListener('touchstart', events, false);
590-
} else {
591-
element.addEventListener('mousedown', events, false);
592-
}
606+
element.addEventListener(touchStartEvent, events, false);
607+
element.addEventListener(mouseStartEvent, events, false);
593608

594609
if (browser.transitions) {
595610
element.addEventListener('webkitTransitionEnd', events, false);

0 commit comments

Comments
 (0)