gpt4 book ai didi

javascript - 具有序数值的 D3 slider 卡在刻度 8 上

转载 作者:行者123 更新时间:2023-11-30 20:02:09 25 4
gpt4 key购买 nike

我正在尝试实现一个 D3 slider ,每个刻度都有序数值。
我使用了以下 slider 实现:
https://github.com/MasterMaps/d3-slider
https://codepen.io/DougManuel/full/avRyMg

这是我的带有 slider 实现的 .js (myslider.js) 代码:

var data2 = ['18:00','18:15','18:30','18:45','19:00','19:15','19:30','19:45','20:00','20:15','20:30','20:45','21:00','21:15','21:30','21:45','22:00','22:15','22:30','22:45'];
var w = window.innerWidth || document.body.clientWidth,
h = 700;

drawSlider();

function drawSlider() {
svg = d3.select("body").append("svg:svg")
.attr("width", w)
.attr("height", h);

svg.append('text')
.attr('class','timeband')
.attr("x", w/2)
.attr("y", h/2)
.attr('text-anchor','middle')
.attr('font-family','sans-serif')
.attr('font-weight','bold')
.attr('font-size','50px')
.attr('fill','black')
.text(data2[0]);

d3.select('#slider2').call(
d3.slider()
.scale(d3.scale.ordinal().domain(data2).rangePoints([0, 1],0.5))
.axis(d3.svg.axis())
.snap(true)
.value(data2[0])
.on("slideend", function(evt, value) {
svg.selectAll("text.timeband")
.text(value)
})
);
}

这是我的html代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="slider2" style="margin-bottom:30px;"></div>
<script src="d3/d3.js"></script> <!--D3 Version 3-->
<script type="text/javascript" src="d3/slider.js"></script>
<!--<script type="text/javascript" src="https://github.com/MasterMaps/d3-slider/blob/master/d3.slider.js"></script>-->
<link rel="stylesheet" href="css/d3.slider.css" />
<!--<link rel="stylesheet" href="https://github.com/MasterMaps/d3-slider/blob/master/d3.slider.css"/>-->
<script type="text/javascript" src="js/myslider.js"></script>
</body>

我的 slider 没有移动到值为“19:45”的第 8 个刻度之外。我认为这取决于比例尺的 rangePoints 函数的配置。我尝试了多种组合,但无法找到最佳设置。

最佳答案

如果停靠点可以被索引(字符串)(第 [281] 行),则 d3-slider 中存在错误。

if ( value[ 0 ] >= value[ 1 ] ) return;

此行用于防止范围 slider value[0] 大于 value[1]。对于带有字符串刻度的非范围 slider ,这取决于当前值是哪个字符串。

如果字符串是 20:00,则条件为真,因此 slider 没有动画/定位。

将行改为

if (toType(value) == "array" && value.length == 2 && value[ 0 ] >= value[ 1 ] ) return;

使测试仅对范围 slider 有效。

关于javascript - 具有序数值的 D3 slider 卡在刻度 8 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53260825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com