forked from feather-components/vm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtabs.js
More file actions
79 lines (63 loc) · 1.7 KB
/
tabs.js
File metadata and controls
79 lines (63 loc) · 1.7 KB
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
var _ = require('./helper');
class Tabs{
constructor(dom, options = {}){
this.options = Object.assign({
target(index){
return _.$(this.getAttribute('data-target'));
},
selector: '*',
currentClassName: '',
current: 0
}, options);
this.dom = dom;
this.initEvent();
setTimeout(() => {
this.to(this.options.current);
}, 0);
}
initEvent(){
_.on(this.dom, 'click', (e) => {
this.to(e.target);
});
}
to(index = 0){
if(typeof index != 'number'){
index = this.index(index);
}
var self = this;
if(index == -1 || index == self.$index){
return;
}
self.$index = index;
var elements = self.$(), element = elements[index];
_.each(self.$(), (element, index) => {
_.removeClass(element, self.options.currentClassName);
self.hideTarget(index);
});
_.addClass(element);
self.showTarget(index);
_.trigger('switch', this.dom, {index, element});
}
target(index){
return this.options.target.call(this.$()[index], index);
}
showTarget(index){
var target = this.target(index);
target && (target.style.display = 'block');
}
hideTarget(index){
var target = this.target(index);
target && (target.style.display = 'none');
}
index(element){
return [].indexOf.call(this.$(), element);
}
$(){
return _.$$(this.options.selector, this.dom);
}
}
export default{
bind(element, data){
new Tabs(element, data.value);
}
}