Skip to content

Commit 2bd14cd

Browse files
committed
Merge pull request loopj#25 from maartenvg/highlight-track-up-to-handle
Add optional highlighting of track up to the handle (like loopj#7)
2 parents 86caf5a + d956009 commit 2bd14cd

File tree

6 files changed

+130
-50
lines changed

6 files changed

+130
-50
lines changed

css/simple-slider-volume.css

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
-webkit-radial-gradient( 50% 50%, 200% 50%, hsla(0,0%,90%,1) 5%, hsla(0,0%,85%,1) 30%, hsla(0,0%,60%,1) 100%);
2424
}
2525

26-
.slider-volume > .track {
26+
.slider-volume > .track, .slider-volume > .highlight-track {
2727
height: 11px;
2828

2929
background: #787878;
@@ -38,4 +38,11 @@
3838
-moz-border-radius: 5px;
3939
-webkit-border-radius: 5px;
4040
border-radius: 5px;
41-
}
41+
}
42+
43+
.slider-volume > .highlight-track {
44+
background-color: #c5c5c5;
45+
background: -moz-linear-gradient(top, #c5c5c5, #a2a2a2);
46+
background: -webkit-linear-gradient(top, #c5c5c5, #a2a2a2);
47+
background: linear-gradient(top, #c5c5c5, #a2a2a2);
48+
}

css/simple-slider.css

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
background: -webkit-linear-gradient(top, #8DCA09, #8DCA09);
2626
}
2727

28-
.slider > .track {
28+
29+
.slider > .track, .slider > .highlight-track {
2930
background: #ccc;
3031
background: -webkit-linear-gradient(top, #bbb, #ddd);
3132
background: -moz-linear-gradient(top, #bbb, #ddd);
@@ -41,4 +42,14 @@
4142

4243
border: 1px solid #aaa;
4344
height: 4px;
44-
}
45+
}
46+
47+
.slider > .highlight-track {
48+
background-color: #8DCA09;
49+
background: -webkit-linear-gradient(top, #8DCA09, #72A307);
50+
background: -moz-linear-gradient(top, #8DCA09, #72A307);
51+
background: linear-gradient(top, #8DCA09, #72A307);
52+
53+
border-color: #496805;
54+
}
55+

demo.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ <h2>Predefined List &amp; Snap</h2>
5656
<h2>Predefined List, Equal Steps &amp; Snap</h2>
5757
<input type="text" data-slider="true" data-slider-values="0,100,500,800,2000" data-slider-equal-steps="true" data-slider-snap="true">
5858

59+
<h2>Highlighted</h2>
60+
<input type="text" data-slider="true" value="0.8" data-slider-highlight="true">
61+
62+
<h2>Highlighted (Themed)</h2>
63+
<input type="text" data-slider="true" value="0.4" data-slider-highlight="true" data-slider-theme="volume">
5964

6065
<script>
6166
$("[data-slider]")
@@ -72,4 +77,4 @@ <h2>Predefined List, Equal Steps &amp; Snap</h2>
7277
});
7378
</script>
7479
</body>
75-
</html>
80+
</html>

js/simple-slider.coffee

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
classPrefix: null
2424
classSuffix: null
2525
theme: null
26+
highlight: false
2627

2728
@settings = $.extend({}, @defaultOptions, options)
2829
@settings.classSuffix = "-#{@settings.theme}" if @settings.theme
@@ -39,27 +40,19 @@
3940
boxSizing: "border-box"
4041
.insertBefore @input
4142
@slider.attr("id", @input.attr("id") + "-slider") if @input.attr("id")
42-
43-
# Create the track
44-
@track = $("<div>")
45-
.addClass("track")
43+
44+
@track = @createDivElement("track")
4645
.css
47-
position: "absolute"
48-
top: "50%"
4946
width: "100%"
50-
userSelect: "none"
51-
cursor: "pointer"
52-
.appendTo @slider
53-
47+
48+
if @settings.highlight
49+
# Create the highlighting track on top of the track
50+
@highlightTrack = @createDivElement("highlight-track")
51+
.css
52+
width: "0"
53+
5454
# Create the slider drag target
55-
@dragger = $("<div>")
56-
.addClass("dragger")
57-
.css
58-
position: "absolute"
59-
top: "50%"
60-
userSelect: "none"
61-
cursor: "pointer"
62-
.appendTo @slider
55+
@dragger = @createDivElement("dragger")
6356

6457
# Adjust dimensions now elements are in the DOM
6558
@slider.css
@@ -69,6 +62,10 @@
6962

7063
@track.css
7164
marginTop: @track.outerHeight()/-2
65+
66+
if @settings.highlight
67+
@highlightTrack.css
68+
marginTop: @track.outerHeight()/-2
7269

7370
@dragger.css
7471
marginTop: @dragger.outerWidth()/-2
@@ -77,11 +74,12 @@
7774
# Hook up drag/drop mouse events
7875
@track
7976
.mousedown (e) =>
80-
return unless e.which == 1
77+
@trackEvent(e)
8178

82-
@domDrag(e.pageX, e.pageY, true)
83-
@dragging = true
84-
false
79+
if @settings.highlight
80+
@highlightTrack
81+
.mousedown (e) =>
82+
@trackEvent(e)
8583

8684
@dragger
8785
.mousedown (e) =>
@@ -135,6 +133,19 @@
135133
position: ratio * @slider.outerWidth()
136134
el: @slider
137135

136+
# Create the basis of the track-div(s)
137+
createDivElement: (classname) ->
138+
item = $("<div>")
139+
.addClass(classname)
140+
.css
141+
position: "absolute"
142+
top: "50%"
143+
userSelect: "none"
144+
cursor: "pointer"
145+
.appendTo @slider
146+
return item
147+
148+
138149
# Set the ratio (value between 0 and 1) of the slider.
139150
# Exposed via el.slider("setRatio", ratio)
140151
setRatio: (ratio) ->
@@ -166,6 +177,14 @@
166177
# Trigger value changed events
167178
@valueChanged(value, ratio, "setValue")
168179

180+
# Respond to an event on a track
181+
trackEvent: (e) ->
182+
return unless e.which == 1
183+
184+
@domDrag(e.pageX, e.pageY, true)
185+
@dragging = true
186+
false
187+
169188
# Respond to a dom drag event
170189
domDrag: (pageX, pageY, animate=false) ->
171190
# Normalize position within allowed range
@@ -194,8 +213,10 @@
194213
setSliderPosition: (position, animate=false) ->
195214
if animate and @settings.animate
196215
@dragger.animate left: position, 200
216+
@highlightTrack.animate width: position, 200 if @settings.highlight
197217
else
198218
@dragger.css left: position
219+
@highlightTrack.css width: position if @settings.highlight
199220

200221
# Set the slider position given a value
201222
setSliderPositionFromValue: (value, animate=false) ->
@@ -331,6 +352,7 @@
331352
settings.snap = $el.data("slider-snap")
332353
settings.equalSteps = $el.data("slider-equal-steps")
333354
settings.theme = $el.data("slider-theme") if $el.data("slider-theme")
355+
settings.highlight = $el.data("slider-highlight") if $el.attr("data-slider-highlight")
334356

335357
# Activate the plugin
336358
$el.simpleSlider settings

js/simple-slider.js

Lines changed: 57 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ var __slice = [].slice,
2222
snapMid: false,
2323
classPrefix: null,
2424
classSuffix: null,
25-
theme: null
25+
theme: null,
26+
highlight: false
2627
};
2728
this.settings = $.extend({}, this.defaultOptions, options);
2829
if (this.settings.theme) {
@@ -37,19 +38,15 @@ var __slice = [].slice,
3738
if (this.input.attr("id")) {
3839
this.slider.attr("id", this.input.attr("id") + "-slider");
3940
}
40-
this.track = $("<div>").addClass("track").css({
41-
position: "absolute",
42-
top: "50%",
43-
width: "100%",
44-
userSelect: "none",
45-
cursor: "pointer"
46-
}).appendTo(this.slider);
47-
this.dragger = $("<div>").addClass("dragger").css({
48-
position: "absolute",
49-
top: "50%",
50-
userSelect: "none",
51-
cursor: "pointer"
52-
}).appendTo(this.slider);
41+
this.track = this.createDivElement("track").css({
42+
width: "100%"
43+
});
44+
if (this.settings.highlight) {
45+
this.highlightTrack = this.createDivElement("highlight-track").css({
46+
width: "0"
47+
});
48+
}
49+
this.dragger = this.createDivElement("dragger");
5350
this.slider.css({
5451
minHeight: this.dragger.outerHeight(),
5552
marginLeft: this.dragger.outerWidth() / 2,
@@ -58,18 +55,23 @@ var __slice = [].slice,
5855
this.track.css({
5956
marginTop: this.track.outerHeight() / -2
6057
});
58+
if (this.settings.highlight) {
59+
this.highlightTrack.css({
60+
marginTop: this.track.outerHeight() / -2
61+
});
62+
}
6163
this.dragger.css({
6264
marginTop: this.dragger.outerWidth() / -2,
6365
marginLeft: this.dragger.outerWidth() / -2
6466
});
6567
this.track.mousedown(function(e) {
66-
if (e.which !== 1) {
67-
return;
68-
}
69-
_this.domDrag(e.pageX, e.pageY, true);
70-
_this.dragging = true;
71-
return false;
68+
return _this.trackEvent(e);
7269
});
70+
if (this.settings.highlight) {
71+
this.highlightTrack.mousedown(function(e) {
72+
return _this.trackEvent(e);
73+
});
74+
}
7375
this.dragger.mousedown(function(e) {
7476
if (e.which !== 1) {
7577
return;
@@ -112,6 +114,17 @@ var __slice = [].slice,
112114
});
113115
}
114116

117+
SimpleSlider.prototype.createDivElement = function(classname) {
118+
var item;
119+
item = $("<div>").addClass(classname).css({
120+
position: "absolute",
121+
top: "50%",
122+
userSelect: "none",
123+
cursor: "pointer"
124+
}).appendTo(this.slider);
125+
return item;
126+
};
127+
115128
SimpleSlider.prototype.setRatio = function(ratio) {
116129
var value;
117130
ratio = Math.min(1, ratio);
@@ -129,6 +142,15 @@ var __slice = [].slice,
129142
return this.valueChanged(value, ratio, "setValue");
130143
};
131144

145+
SimpleSlider.prototype.trackEvent = function(e) {
146+
if (e.which !== 1) {
147+
return;
148+
}
149+
this.domDrag(e.pageX, e.pageY, true);
150+
this.dragging = true;
151+
return false;
152+
};
153+
132154
SimpleSlider.prototype.domDrag = function(pageX, pageY, animate) {
133155
var pagePos, ratio, value;
134156
if (animate == null) {
@@ -155,13 +177,23 @@ var __slice = [].slice,
155177
animate = false;
156178
}
157179
if (animate && this.settings.animate) {
158-
return this.dragger.animate({
180+
this.dragger.animate({
159181
left: position
160182
}, 200);
183+
if (this.settings.highlight) {
184+
return this.highlightTrack.animate({
185+
width: position
186+
}, 200);
187+
}
161188
} else {
162-
return this.dragger.css({
189+
this.dragger.css({
163190
left: position
164191
});
192+
if (this.settings.highlight) {
193+
return this.highlightTrack.css({
194+
width: position
195+
});
196+
}
165197
}
166198
};
167199

@@ -319,6 +351,9 @@ var __slice = [].slice,
319351
if ($el.data("slider-theme")) {
320352
settings.theme = $el.data("slider-theme");
321353
}
354+
if ($el.attr("data-slider-highlight")) {
355+
settings.highlight = $el.data("slider-highlight");
356+
}
322357
return $el.simpleSlider(settings);
323358
});
324359
});

0 commit comments

Comments
 (0)