рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдмрд╣реБрдд рдмрд╛рд░, рдФрд░ рди рдХреЗрд╡рд▓, рдЖрдк рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рд╕рд╛рде рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрд▓рд╛рдЗрдбрд░ рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХреЛ рдвреВрдВрдврдирд╛ рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рдЪрд┐рдкрдХрд╛рдирд╛ред рдлрд┐рд░ рдореИрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред JqueryUI.slider рдкреНрд▓рдЧрдЗрди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХреБрдЫ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ (рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рдФрд░ рдореИрдВ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдореЗрдВ рдШреВрдордирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛) рдФрд░ рдЕрдкрдиреА рдЦреБрдж рдХреА "рдмрд╛рдЗрдХ" рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ "рдмрд╛рдЗрдХ" рдХреЛ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рди рд╣реЛред рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░рд╛ рдПрдХ рджреЛрд╕реНрдд рдХрд╣рддрд╛ рд╣реИ: "рдХрдо" рдмрд╛рдПрдВ "рдХрдиреЗрдХреНрд╢рди, рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред"
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓рд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рд╡рд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдореЙрдбрд▓ рдерд╛
<div class="filter"> <div> <span> 1</span> <div><number>10</number><number>50</number></div> <div class="slider"> <div class="block-min" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> <div class="color-range"></div> <div class="block-max" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> </div> </div> <div> <span> 2</span> <div><number>0</number><number>5</number></div> <div class="slider"> <div class="block-min" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> <div class="color-range"></div> <div class="block-max" onMouseDown="moveRange(this)" onTouchStart="moveRange(this)"></div> </div> </div> </div>
рд╕реНрдХреНрд░реАрди рдкрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ

рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рд╕рд╛рде рд╕реНрд▓рд╛рдЗрдбрд░ рд╕реНрд╡рдпрдВ "рд╕реНрд▓рд╛рдЗрдбрд░" рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 2 рдФрд░ рдмреНрд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВ: рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рд╕реНрд▓рд╛рдЗрдбрд░ рдФрд░ рдЕрдзрд┐рдХрддрдо рд░реЗрдВрдЬ рдореВрд▓реНрдп рд╕реНрд▓рд╛рдЗрдбрд░ред
рд╡реЗ рджреЛ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
- onMouseDown - рдЬрдм рд╣рдо рдорд╛рдЙрд╕ рд╕реЗ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ;
- onTouchStart - рдЬрдм рдЖрдк рд╣рдорд╛рд░реЗ рд╕реНрд▓рд╛рдЗрдбрд░ рдкрд░ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рд╕реЗ рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рдКрдкрд░ рджреЛ рдирдВрдмрд░ рд╡рд╛рд▓рд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ - рдпрд╣ рд╣рдорд╛рд░рд╛ рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рдорд╛рди рд╣реИред
<div><number>0</number><number>5</number></div>
рдЕрдм рд╣рдо рдлрдВрдХреНрд╢рди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
function moveRange (elem) {
GetCoords рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЖрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИред
function getCoords(elem) { let coords = elem.getBoundingClientRect(); return {
рдЕрдм рд╣рдо рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп onMouseMove рд╣реИ, рдЬрд┐рд╕реЗ рдорд╛рдЙрд╕ рдЪрд▓рдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдХреНрд╖реИрддрд┐рдЬ рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
function onMouseMove(e) { e.preventDefault();
рдФрд░ рдЕрдВрдд рдореЗрдВ, "рд░рд┐рд▓реАрдЬ рдмрдЯрди" рдШрдЯрдирд╛ рдпрд╛ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕реНрдкрд░реНрд╢ рдмрд┐рдВрджреБ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рдиред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рднреА рдИрд╡реЗрдВрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рд╕реЗрдЯ рд╡реИрд▓реНрдпреВ рдкрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
function onMouseUp() { document.removeEventListener('mouseup', onMouseUp); document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('touchend', onMouseUp); document.removeEventListener('touchmove', onMouseMove); }
рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣рдорд╛рд░реЗ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ
.filter { padding: 30px; width: 500px; } .filter>div { padding-top: 20px; display: -webkit-flex; display: -moz-flex; display: -ms-flex; display: -o-flex; display: flex; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; -o-flex-direction: column; flex-direction: column; } .filter>div>div { display: -webkit-flex; display: -moz-flex; display: -ms-flex; display: -o-flex; display: flex; justify-content: space-between; } .filter .slider { margin-top: 10px; position: relative; height: 6px; background: #fff; border: 1px solid #000; } .filter .color-range { position: absolute; background: #a4a4a4; width: 97%; border: none; height: 6px; left: 15px; } .filter .block-min, .block-max { width: 15px; height: 25px; position: absolute; left: 0; top: -11.5px; background: #fff; border: 1px solid #000; border-radius: 4px; z-index: 1; } .filter .block-max{ left: 97%; }
рдЗрд╕ рд╕реНрд▓рд╛рдЗрдбрд░ рдХрд╛ рдХрд╛рд░реНрдп рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ ред
рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ GitHub рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ ред
рдЖрдирдВрджрджрд╛рдпрдХ рдЙрдкрдпреЛрдЧ рдФрд░ рдЖрд╕рд╛рди рдХрд╛рдо!