Skip to content

Commit 16eff08

Browse files
committed
Bug #115 Touch events not getting proper position
1 parent 00f21db commit 16eff08

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/scripts/controller.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,9 @@ export default class AngularColorPickerController {
570570
event.preventDefault();
571571

572572
var el = this.find('.color-picker-hue');
573-
this.hue = (1 - ((event.pageY - this.offset(el).top) / el.prop('offsetHeight'))) * 360;
573+
var eventPos = this.getEventPos(event);
574+
575+
this.hue = (1 - ((eventPos.pageY - this.offset(el).top) / el.prop('offsetHeight'))) * 360;
574576

575577
if (this.hue > 360) {
576578
this.hue = 360;
@@ -619,7 +621,9 @@ export default class AngularColorPickerController {
619621
event.preventDefault();
620622

621623
var el = this.find('.color-picker-opacity');
622-
this.opacity = (1 - ((event.pageY - this.offset(el).top) / el.prop('offsetHeight'))) * 100;
624+
var eventPos = this.getEventPos(event);
625+
626+
this.opacity = (1 - ((eventPos.pageY - this.offset(el).top) / el.prop('offsetHeight'))) * 100;
623627

624628
if (this.opacity > 100) {
625629
this.opacity = 100;
@@ -666,11 +670,12 @@ export default class AngularColorPickerController {
666670
event.preventDefault();
667671

668672
var el = this.find('.color-picker-grid-inner');
673+
var eventPos = this.getEventPos(event);
669674
var offset = this.offset(el);
670675

671676
if (this.options.round) {
672-
var dx = ((event.pageX - offset.left) * 2.0 / el.prop('offsetWidth')) - 1.0;
673-
var dy = -((event.pageY - offset.top) * 2.0 / el.prop('offsetHeight')) + 1.0;
677+
var dx = ((eventPos.pageX - offset.left) * 2.0 / el.prop('offsetWidth')) - 1.0;
678+
var dy = -((eventPos.pageY - offset.top) * 2.0 / el.prop('offsetHeight')) + 1.0;
674679

675680
var tmpSaturation = Math.sqrt(dx * dx + dy * dy);
676681
var tmpHue = Math.atan2(dy, dx);
@@ -683,8 +688,8 @@ export default class AngularColorPickerController {
683688
this.hue = degHue;
684689
this.lightness = 100;
685690
} else {
686-
this.saturation = ((event.pageX - offset.left) / el.prop('offsetWidth')) * 100;
687-
this.lightness = (1 - ((event.pageY - offset.top) / el.prop('offsetHeight'))) * 100;
691+
this.saturation = ((eventPos.pageX - offset.left) / el.prop('offsetWidth')) * 100;
692+
this.lightness = (1 - ((eventPos.pageY - offset.top) / el.prop('offsetHeight'))) * 100;
688693

689694
if (this.saturation > 100) {
690695
this.saturation = 100;
@@ -758,6 +763,10 @@ export default class AngularColorPickerController {
758763
// helper functions
759764
//---------------------------
760765

766+
getEventPos(event) {
767+
return event.type.search('touch') === 0 ? event.changedTouches[0] : event;
768+
}
769+
761770
eventApiDispatch(name, args) {
762771
if (this.eventApi && typeof this.eventApi[name] === 'function') {
763772
if (!args) {
@@ -777,7 +786,6 @@ export default class AngularColorPickerController {
777786
results = [],
778787
nodeType;
779788

780-
781789
// Same basic safeguard as Sizzle
782790
if (!selector) {
783791
return results;

0 commit comments

Comments
 (0)