Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2018, 20:36
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Как допилить круглый 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>

Последний раз редактировалось kostyanet, 07.04.2018 в 20:39.
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2018, 20:40
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Кароч, чота оно тут не крутится, наверно не грузит эту лайбу - д3жс. )
Ответить с цитированием
  #3 (permalink)  
Старый 09.04.2018, 10:04
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от kostyanet
чота оно тут не крутится, наверно не грузит эту лайбу - д3жс. )
Сделайте так
<script src="https://d3js.org/d3.v3.min.js"></script>

- будет грузиться

Добавьте после <body>
<input id="diap" type = "text" />

В строку 81
diap.value = alpha;

- будет показывать.

Последний раз редактировалось Dilettante_Pro, 09.04.2018 в 11:14.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше подключать SVG объект Black_Star (X)HTML/CSS 0 02.12.2016 00:09
слайдер как на forumspb.com utb Элементы интерфейса 1 08.11.2011 10:52
jQuery UI Slider - как синхронизировать слайдер со значнием? frightened jQuery 0 24.07.2011 00:19
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Как сделать слайдер картинок?!?! Risk Общие вопросы Javascript 1 07.06.2010 10:30