javascript - D3.js 和 Dragdealer JS

标签 javascript html svg d3.js

我正在将 dragdealer JSD3.js 结合使用。我正在做的是,当您拖动 dragdealer JS 制作的 slider 时,D3.js 制作的元素将像图片 slider 一样移动。

这是我编写的代码:code .

现在这段代码有两个问题:

1) 此代码可以在 FireFox 中运行,但不能在 Chrome 和 IE 10 中运行?

2) 如何配置 slider ,以便在一张幻灯片上只有一个图 block 会移入 View 且只有一个图 block 会移出?

图 block 或矩形的数量不固定。根据用户的不同,可以有任意数量的图 block 。

代码:

var width = 4000,
height = 200,
margin = 2,
nRect = 20,
rectWidth = (width - (nRect - 1) * margin) / nRect,
svg = d3.select('#chart').append('svg')
    .attr('width', width);

var data = d3.range(nRect),
posScale = d3.scale.linear()
    .domain(d3.extent(data))
    .range([0, width - rectWidth]);
console.log(rectWidth)
svg.selectAll('rect')
.data(data)
.enter()
.append('rect')
.attr('x', posScale)
.attr('width', rectWidth)
.attr('height', height);

function redraw(x) 
{


    svg.transition()        
        .ease("linear")
        .attr("transform", "translate(" + -(x*rectWidth) + ")" );

        console.log(-(x*rectWidth));

}

var step = nRect/2;
new Dragdealer('magnifier',
{
    steps: step,
    snap: true,
    animationCallback: function(x, y)
    { console.log(x*10)
        redraw(x*step);

    }
});

我正在尝试设计一种方法,使steps的值根据图 block 的数量而变化。

请帮助我。

最佳答案

您遇到了一些问题,我已在此处修复:http://jsfiddle.net/SqKZv/1/

  1. 在 Chrome 中,您的 svg 元素需要设置 height 属性
  2. 在 Chrome/IE 中,您似乎无法将 transform 属性应用到 SVG 元素,实际上我很惊讶这在 FireFox 中有效。我将所有 rect 元素包装在 g 元素中并对其进行了转换。

D3 本身就可以很好地进行拖动,因此您不需要 Dragdealer 来执行此操作。除了d3.behavior.drag ,您可以查看d3.svg.brush ,特别是这些捕捉以获得您想要的东西的示例:

关于javascript - D3.js 和 Dragdealer JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18878803/

相关文章:

javascript - 设置页面加载时 iframe 的高度和宽度

javascript - jQuery:轮播的媒体查询

php - 如何将选项值传递给按钮

android - 从 SVG 设置图层列表项

javascript - 将裁剪区域与非裁剪区域分开

javascript - 表单提交时 <iframe> 背景发生变化

javascript - 从服务器 discord.js 获取一个随机用户

javascript - Vim jshint 错误 "bad line breaking before ' ,'"

html - 我可以使用 css 通过标题唯一地标识或拉出一个类或 div 吗?

image-processing - 如何将 SVG 图像 "paths"转换为单独的 PNG 图像?