-
Notifications
You must be signed in to change notification settings - Fork 239
/
Copy pathToggleBehavior.js
81 lines (81 loc) · 2.05 KB
/
ToggleBehavior.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
export class ToggleBehavior extends Behavior {
changeOffset(container, offset) {
var bar = container.first;
var button = bar.next;
if (offset < 0)
offset = 0;
else if (offset > this.size)
offset = this.size;
else
offset = Math.round(offset);
this.offset = offset;
bar.state = button.state = container.active ? 1 + (this.offset / this.size) : 0;
button.x = bar.x + this.offset + 1;
}
onCreate(container, data) {
this.data = data;
}
onDataChanged(container) {
this.changeOffset(container, this.data.value ? this.size : 0);
}
onDisplaying(container) {
var bar = container.first;
var button = bar.next;
this.size = bar.width - button.width - 2;
let data = this.data;
this.onDataChanged(container);
}
onTimeChanged(container) {
this.changeOffset(container, this.anchor + Math.round(this.delta * container.fraction));
}
onTouchBegan(container, id, x, y, ticks) {
if (container.running) {
container.stop();
container.time = container.duration;
}
this.anchor = x;
this.moved = false;
this.delta = this.offset;
container.captureTouch(id, x, y, ticks);
}
onTouchEnded(container, id, x, y, ticks) {
var offset = this.offset;
var size = this.size;
var delta = size >> 1;
if (this.moved) {
if (offset < delta)
delta = 0 - offset;
else
delta = size - offset;
}
else {
if (offset == 0)
delta = size;
else if (offset == size)
delta = 0 - size;
else if (x > (container.x + (container.width >> 1)))
delta = size - offset;
else
delta = 0 - offset;
}
if (delta) {
this.anchor = offset;
this.delta = delta;
container.duration = 125 * Math.abs(delta) / size;
container.time = 0;
container.start();
}
var value = ((this.offset + delta) == 0) ? false : true;
let data = this.data;
if (data.value != value) {
data.value = value;
this.onValueChanged(container);
}
}
onTouchMoved(container, id, x, y, ticks) {
this.moved = Math.abs(x - this.anchor) >= 8;
this.changeOffset(container, this.delta + x - this.anchor);
}
onValueChanged(container) {
}
};