Как допилить круглый svg-слайдер до диапазона
Что внизу - то я нашел где-то, собрал в один хтмл и все там ноормально работает, но, там написано на какой-то херне d3js, и во-вторых у меня не хватает извилин разобраться еще и с SVG, а задача такая:
Надо сделать 2 ползунка по кругу и чтобы их значения выводились через событие в 2 поля ввода. Дело в том, что линейные элементы управления становятся бесполезными на больших диапазонах, скажем цена от 10 до 50000. Можно, конечно, логарифмировать, но чисто геометрически растянуть - проще, а чтобы слайдер нормально влезал в панель фильтра на странице - его можно сделать круглым. Или, если есть на примете готовое решение, только блин не жирное, и не на канвасе и не на css, а так же - на svg, - то дайте пожалуйста ссылку. Заранее спасибо. <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>D3.js Round Slider</title> <script src="http://d3js.org/d3.v3.min.js"></script> <style> .circumference { fill: #fff; stroke: #f2f2f2; stroke-width: 5px; } .dot circle:hover { cursor: pointer; } .dot circle { fill: lightsteelblue; stroke: steelblue; stroke-width: 1.5px; } .dot circle.dragging { fill: red; stroke: brown; } </style> </head> <body> <script> var width = 960, height = 500; var circumference_r = 100; var drag = d3.behavior.drag() .origin(function(d) { return d; }) .on("dragstart", dragstarted) .on("drag", dragged) .on("dragend", dragended); var svg = d3.select("body").append("svg") .attr("width", width) .attr("height", height) .append("g") .attr("transform", "translate(" + width/2 + "," + height/2 + ")"); var container = svg.append("g"); var circumference = container.append('circle') .attr('r', circumference_r) .attr('class', 'circumference'); handle = [{ x: 0, y: -circumference_r }]; handle_circle = container.append("g") .attr("class", "dot") .selectAll('circle') .data(handle) .enter().append("circle") .attr("r", 5) .attr("cx", function(d) { return d.x;}) .attr("cy", function(d) { return d.y;}) .call(drag); function dragstarted(d) { d3.event.sourceEvent.stopPropagation(); d3.select(this) .classed("dragging", true); } function dragged(d) { d_from_origin = Math.sqrt(Math.pow(d3.event.x,2)+Math.pow(d3.event.y,2)); alpha = Math.acos(d3.event.x/d_from_origin); d3.select(this) .attr("cx", d.x = circumference_r*Math.cos(alpha)) .attr("cy", d.y = d3.event.y < 0 ? -circumference_r*Math.sin(alpha) : circumference_r*Math.sin(alpha)); } function dragended(d) { d3.select(this) .classed("dragging", false); } </script> </body> </html> |
Кароч, чота оно тут не крутится, наверно не грузит эту лайбу - д3жс. )
|
Цитата:
<script src="https://d3js.org/d3.v3.min.js"></script> - будет грузиться Добавьте после <body> <input id="diap" type = "text" /> В строку 81 diap.value = alpha; - будет показывать. |
Часовой пояс GMT +3, время: 08:28. |