Skip to content

Instantly share code, notes, and snippets.

@rossjha
Created August 21, 2022 19:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rossjha/01b47a0e7683a73ae2ff36a402c3463d to your computer and use it in GitHub Desktop.
Save rossjha/01b47a0e7683a73ae2ff36a402c3463d to your computer and use it in GitHub Desktop.
Range II
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
export default class ApplicationController extends Controller {
@tracked start = 25;
@tracked end = 75;
@action setRangeValues([start, end]) {
this.start = start;
this.end = end;
}
}
import { modifier } from "ember-modifier";
export default modifier(
function onInputRange(element, [doOnInputRange]) {
const rangeStart = element.querySelector('.range-start');
const rangeEnd = element.querySelector('.range-end');
const rangeInputHandler = (evt) => {
const startValue = parseInt(rangeStart.value);
const endValue = parseInt(rangeEnd.value);
rangeStart.style.zIndex = 1;
rangeEnd.style.zIndex = 2;
if (startValue > endValue) {
rangeStart.style.zIndex = 2;
rangeEnd.style.zIndex = 1;
}
doOnInputRange([startValue, endValue]);
};
element.addEventListener("input", rangeInputHandler);
return () => {
element.removeEventListener("input", rangeInputHandler);
};
});
@import "https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css";
body{
background: #F9FAFB;
}
.Input-Range input[type="range"] {
pointer-events: none;
}
.Input-Range input[type="range"]::-webkit-slider-thumb{
pointer-events: all;
}
.Input-Range input[type="range"]:focus{
outline: none;
}
.Input-Range input[type="range"]:focus::-webkit-slider-thumb{
border-radius: 50%;
border: 2px solid #fff;
outline: 3px solid #0075FF;
}
<main class="container mx-auto my-8 bg-gray-50">
<InputRange
@min="0"
@max="100"
@step="1"
@startValue={{this.start}}
@endValue={{this.end}}
@onInputRange={{this.setRangeValues}}
/>
{{concat "Start: " this.start " End: " this.end}}
{{outlet}}
</main>
<div class="Input-Range relative h-4" ...attributes {{on-range-input @onInputRange}}>
<input
type="range"
class="range-start absolute w-full"
min={{@min}}
max={{@max}}
step={{@step}}
value={{@startValue}}
>
<input type="range"
class="range-end absolute w-full"
min={{@min}}
max={{@max}}
step={{@step}}
value={{@endValue}}
>
</div>
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0",
"ember-data": "3.18.0",
"ember-truth-helpers": "3.0.0",
"ember-modifier": "3.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment