Есть слайдер-ползунок, работающий с помощью jquery-ui. https://codepen.io/Raneto4ka/pen/WBMmer И есть задача - менять вид ползунка при изменении его положения. Например: вместо стандартного кружка будут смайлы (меняются от грустного к веселому), или этот кружок должен заполняться цветом в процессе перетаскивания, или менять свой размер (сначала мелкий, постепенно увеличивается приближаясь к 100%). Это вообще реально сделать? Подобных примеров нигде не нашла.
<div class="w-slider input-field">
<div class="slider"></div>
<div><span class="value-slider">10%</span></div>
</div>
slide: function( event, ui ) {
$( "span.ui-slider-handle" ).css( {"width": ui.value, "height": ui.value} );
$( ".value-slider" ).html( ui.value + '%');
}
Вобщем, таким способом можно и смайлы вместо кружка вставлять, и цвет менять и тд.
Сделал range слайдер на svg
по мотивам вопроса..
В принципе возможно заменить форму кривой, просто заменив значение path
d
в svg-шке
let g = document.querySelector('svg g');
let path = document.querySelector('svg path');
let pathbg = document.querySelector('svg path + path');
let smile = document.querySelector('svg g path');
let span = document.querySelector('span');
let l = path.getTotalLength();
g.addEventListener('mousedown', hold)
upd(27,32,0);
function upd(x,y,len) {
let v = len/l;
g.setAttribute('transform', `translate(${x},${y})`)
smile.setAttribute('d', `M-7,${v*7} C-4,${(1-v)*7},4,${(1-v)*7},7,${v*7}`)
path.setAttribute('stroke-dasharray', `${len} 1000`)
pathbg.setAttribute('stroke-dasharray', `0 ${len} 1000`)
span.textContent = Math.round(v*100)/100;
}
function move(e){
let pt = closestPoint(path, [e.x, e.y]);
upd(pt.x,pt.y, pt.length);
}
function hold(e) {
addEventListener('mousemove', move);
addEventListener('mouseup', release);
}
function release() {
removeEventListener('mousemove', move);
removeEventListener('mouseup', release);
}
function closestPoint(pathNode, point) {
var pathLength = pathNode.getTotalLength(), precision = 8, best, bestLength, bestDistance = Infinity;
for (var scan, scanLength = 0, scanDistance; scanLength <= pathLength; scanLength += precision) {
if ((scanDistance = distance2(scan = pathNode.getPointAtLength(scanLength))) < bestDistance) {
best = scan, bestLength = scanLength, bestDistance = scanDistance;
}
}
precision /= 2;
while (precision > 0.5) {
var before, after, beforeLength, afterLength, beforeDistance, afterDistance;
if ((beforeLength = bestLength - precision) >= 0 &&
(beforeDistance = distance2(before = pathNode.getPointAtLength(beforeLength))) < bestDistance) {
best = before, bestLength = beforeLength, bestDistance = beforeDistance;
} else if ((afterLength = bestLength + precision) <= pathLength &&
(afterDistance = distance2(after = pathNode.getPointAtLength(afterLength))) < bestDistance) {
best = after, bestLength = afterLength, bestDistance = afterDistance;
} else {
precision /= 2;
}
}
best.distance = Math.sqrt(bestDistance);
best.length = bestLength;
return best;
function distance2(p) {
var dx = p.x - point[0], dy = p.y - point[1];
return dx * dx;// + dy * dy;
}
}
.track {
fill: none;
stroke-width: 4px;
}
.smile {
fill: none;
stroke-width: 2px;
stroke: red;
}
.knob {
cursor: pointer;
stroke-width: 2px;
fill: white;
stroke: red;
}
<svg height="150" width="500">
<path class="track" style="stroke:red" d="M27,32 C27,32,50,77,72,74 C94,71,124,24,152,17 C180,10,201,32,229,33 C257,34,284,15,311,25 C338,35,357,80,378,88 C399,96,426,72,426,72"></path>
<path class="track" style="stroke:lightgray" d="M27,32 C27,32,50,77,72,74 C94,71,124,24,152,17 C180,10,201,32,229,33 C257,34,284,15,311,25 C338,35,357,80,378,88 C399,96,426,72,426,72"></path>
<g>
<circle class="knob" r="11"></circle>
<circle class="knob" r="1" cx="3" cy="-3"></circle>
<circle class="knob" r="1" cx="-3" cy="-3"></circle>
<path class="smile"></path>
</g>
</svg>
<br><span></span>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Написать структуру, которая обрабатывала бы входные данные следующим образомНа входе даётся целое число, указывающее количество операций
Есть ли какая нибудь замена, либо аналогия временной C++ библиотеки chrono (в ходящей в пространство имен std) в C ??
Мне нужно от минимального элемента вектора до максимального поменять знаки элементов на противоположные
Подскажите как можно выставить пустое/нулевое значение для типа