forked from tdreyno/iphone-style-checkboxes
-
Notifications
You must be signed in to change notification settings - Fork 1
/
iphone-style-checkboxes.js
65 lines (55 loc) · 2 KB
/
iphone-style-checkboxes.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
(function($){
$.iphoneStyle = {
defaults: { checkedLabel: 'ON', uncheckedLabel: 'OFF', background: '#fff' }
}
$.fn.iphoneStyle = function(options) {
options = $.extend($.iphoneStyle.defaults, options);
return this.each(function() {
var elem = $(this);
if (!elem.is(':checkbox'))
return;
elem.css({ opacity: 0 });
elem.wrap('<div class="container" />');
elem.after('<div class="handle"><div class="bg" style="background: ' + options.background + '"/><div class="slider" /></div>')
.after('<label class="off">'+ options.uncheckedLabel + '</label>')
.after('<label class="on">' + options.checkedLabel + '</label>');
var handle = elem.siblings('.handle'),
handlebg = handle.children('.bg'),
offlabel = elem.siblings('.off'),
onlabel = elem.siblings('.on'),
container = elem.parent('.container'),
rightside = container.width() - 39;
container.click(function() {
var is_onstate = (handle.position().left <= 0);
new_left = (is_onstate) ? rightside : 0,
bgleft = (is_onstate) ? 34 : 0;
handlebg.hide();
handle.animate({ left: new_left }, 100, function() {
handlebg.css({ left: bgleft }).show();
});
if (is_onstate) {
onlabel.show();
onlabel.animate({ opacity: 1 }, 200);
offlabel.animate({ opacity: 0 }, 200, function(){
offlabel.hide();
});
} else {
offlabel.show();
offlabel.animate({ opacity: 1 }, 200);
onlabel.animate({ opacity: 0 }, 200, function(){
onlabel.hide();
});
}
elem.attr('checked', !is_onstate);
return false;
});
// initial load
if (elem.is(':checked')) {
offlabel.css({ opacity: 0 });
onlabel.css({ opacity: 1 });
handle.css({ left: rightside });
handlebg.css({ left: 34 });
}
});
};
})(jQuery);