Skip to content

Commit 3db2ca3

Browse files
author
scottjehl
committed
Refactored the design and visual behavior of the switch control.
1 parent ca6174c commit 3db2ca3

File tree

2 files changed

+26
-29
lines changed

2 files changed

+26
-29
lines changed

css/structure/jquery.mobile.forms.slider.css

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,23 @@ input.ui-slider-input,
33
.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; }
44
select.ui-slider-switch { display: none; }
55
div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; }
6-
div.ui-slider-switch { width: 99.8%; }
7-
.ui-field-contain div.ui-slider-switch { width: 50%; }
86
a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; }
97
a.ui-slider-handle .ui-btn-inner { padding-left: 0; padding-right: 0; }
10-
@media all and (min-width: 480px){
8+
@media all and (min-width: 320px){
119
.ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
1210
.ui-field-contain div.ui-slider { width: 43%; }
13-
.ui-field-contain div.ui-slider-switch { width: 35%; }
11+
.ui-field-contain div.ui-slider-switch { width: 5em; }
1412
}
15-
div.ui-slider-switch { height: 32px; overflow: hidden; margin-left: 0; }
16-
div.ui-slider-inneroffset { margin-left: 50%; position: absolute; top: 1px; height: 100%; width: 50%; }
13+
14+
div.ui-slider-switch { height: 32px; margin-left: 0; width: 5em; }
1715
a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; }
18-
div.ui-slider-labelbg { position: absolute; top:0; margin: 0; border-width: 0; }
19-
div.ui-slider-switch div.ui-slider-labelbg-a { width: 60%; height: 100%; left: 0; }
20-
div.ui-slider-switch div.ui-slider-labelbg-b { width: 60%; height: 100%; right: 0; }
21-
.ui-slider-switch-a div.ui-slider-labelbg-a, .ui-slider-switch-b div.ui-slider-labelbg-b { z-index: -1; }
22-
.ui-slider-switch-a div.ui-slider-labelbg-b, .ui-slider-switch-b div.ui-slider-labelbg-a { z-index: 0; }
16+
div.ui-slider-switch .ui-slider-handle { margin-top: 1px; }
17+
.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; }
18+
19+
span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; border-width: 0; }
20+
span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; }
21+
span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;}
22+
23+
24+
.ui-slider-inline { width: 120px; display: inline-block; }
2325

24-
div.ui-slider-switch a.ui-slider-handle { z-index: 1; width: 100%; height: 30px; margin-top: -17px; margin-left: -100%; }
25-
span.ui-slider-label { width: 100%; position: absolute; height: 32px; font-size: 16px; text-align: center; line-height: 1.8; background: none; border-color: transparent; }
26-
span.ui-slider-label-a { left: -100%; margin-right: -1px }
27-
span.ui-slider-label-b { right: -100%; margin-left: -1px }

js/jquery.mobile.forms.slider.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,13 @@ $.widget( "mobile.slider", $.mobile.widget, {
8585
control.find( "option" ).each(function( i ) {
8686

8787
var side = !i ? "b":"a",
88-
corners = !i ? "right" :"left",
8988
theme = !i ? " ui-btn-down-" + trackTheme :( " " + $.mobile.activeBtnClass );
9089

91-
$( "<div class='ui-slider-labelbg ui-slider-labelbg-" + side + theme + " ui-btn-corner-" + corners + "'></div>" )
90+
$( "<span class='ui-slider-label ui-slider-label-" + side + theme + " ui-btn-corner-all' role='img'>" + $( this ).getEncodedText() + "</span>" )
9291
.prependTo( slider );
93-
94-
$( "<span class='ui-slider-label ui-slider-label-" + side + theme + " ui-btn-corner-" + corners + "' role='img'>" + $( this ).getEncodedText() + "</span>" )
95-
.prependTo( handle );
9692
});
93+
94+
self._labels = $( ".ui-slider-label", slider );
9795

9896
}
9997

@@ -331,15 +329,16 @@ $.widget( "mobile.slider", $.mobile.widget, {
331329
title: cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText()
332330
});
333331

334-
// add/remove classes for flip toggle switch
335-
if ( cType === "select" ) {
336-
if ( newval === 0 ) {
337-
this.slider.addClass( "ui-slider-switch-a" )
338-
.removeClass( "ui-slider-switch-b" );
339-
} else {
340-
this.slider.addClass( "ui-slider-switch-b" )
341-
.removeClass( "ui-slider-switch-a" );
342-
}
332+
// drag the label widths
333+
if ( this._labels ) {
334+
var handlePercent = this.handle.width() / this.slider.width() * 100,
335+
aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100,
336+
bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 );
337+
338+
this._labels.each(function(){
339+
var ab = $(this).is( ".ui-slider-label-a" );
340+
$( this ).width( ( ab ? aPercent : bPercent ) + "%" );
341+
});
343342
}
344343

345344
if ( !preventInputUpdate ) {

0 commit comments

Comments
 (0)