-
Notifications
You must be signed in to change notification settings - Fork 3
/
strapPoint.js
126 lines (95 loc) · 3.14 KB
/
strapPoint.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* strapPoint v0.2.0
* https://github.com/dannynimmo/strapPoint
* Copyright 2015 Danny Nimmo
*/
;(function (window, document, $, undefined) {
'use strict';
var H = {
namespace: 'strapPoint',
eventName: 'strapPoint-responsive-breakpoint',
currentSize: null,
previousSize: null,
listenerCount: 0,
xs: { name: 'xs', maxWidth: 767, value: 1 },
sm: { name: 'sm', maxWidth: 991, value: 2 },
md: { name: 'md', maxWidth: 1199, value: 3 },
lg: { name: 'lg', maxWidth: NaN, value: 4 },
$eventTarget: $(document),
init: function () {
H.currentSize = H.getSize();
$(window).on('resize', function () {
var size = H.getSize();
if (size !== H.currentSize) {
H.previousSize = H.currentSize;
H.currentSize = size;
H.$eventTarget.trigger(H.eventName);
}
});
},
getSize: function () {
var windowWidth = $(window).width();
if (windowWidth > H.md.maxWidth) {
return H.lg.name;
} else if (windowWidth > H.sm.maxWidth) {
return H.md.name;
} else if (windowWidth > H.xs.maxWidth) {
return H.sm.name;
} else {
return H.xs.name;
}
},
getListenerId: function () {
return H.namespace + '-' + H.listenerCount++;
},
run: function (size, callback) {
if (size === 'all' || size.indexOf(H.currentSize) >= 0) {
var direction = (H[H.currentSize].value > H[H.previousSize].value) ? 'up' : 'down';
callback(direction);
}
}
};
H.init();
var R = {
version: '0.2.0',
xs: function (callback) {
return R.on(H.xs.name, callback);
},
sm: function (callback) {
return R.on(H.sm.name, callback);
},
md: function (callback) {
return R.on(H.md.name, callback);
},
lg: function (callback) {
return R.on(H.lg.name, callback);
},
change: function (callback) {
return R.on('all', callback);
},
on: function (size, callback) {
var listenerId = H.getListenerId();
H.$eventTarget.on(H.eventName + '.' + listenerId, function () {
H.run(size, callback);
});
return listenerId;
},
one: function (size, callback) {
var listenerId = H.getListenerId();
H.$eventTarget.one(H.eventName + '.' + listenerId, function () {
H.run(size, callback);
});
return listenerId;
},
off: function (listenerId) {
H.$eventTarget.off(H.eventName + '.' + listenerId);
},
is: function (size) {
return (size.indexOf(H.currentSize) >= 0);
},
get: function () {
return H.currentSize;
}
};
$.strapPoint = R;
})(window, document, jQuery);