javascript - 鱼眼效果 D3js 图像幻灯片适用于矩形/对象但不适用于图像文件,错误 : <image> attribute x: Expected length, "NaN"

标签 javascript d3.js slide

我的问题是,当图像没有如下内容时,动画效果很好,但是一旦加载它们,我就会收到以下错误:Error: <image> attribute x: Expected length, "NaN".这是一个代码片段:

var data = ['https://cdn.britannica.com/60/8160-050-08CCEABC/German-shepherd.jpg', 'https://cdn.britannica.com/60/8160-050-08CCEABC/German-shepherd.jpg', 'https://cdn.britannica.com/60/8160-050-08CCEABC/German-shepherd.jpg', 'https://cdn.britannica.com/60/8160-050-08CCEABC/German-shepherd.jpg', 'https://cdn.britannica.com/60/8160-050-08CCEABC/German-shepherd.jpg'];

var w = window,
  d = document,
  e = d.documentElement,
  g = d.getElementsByTagName('body')[0],
  wid = 400
y = 400;

var svg = d3.select("body").append("svg")
  .attr("width", wid)
  .attr("height", "400")
  .on('mousemove', () => {
    let x = event.x - 20;
    d3.selectAll('.content')
      .attr('x', (d, i) => fisheye(d, x))
  })
  .on('mouseleave', () => {
    d3.selectAll('.content').transition().attr(
      'x', (d, i) => xScale(i))
  })

var chart = svg.append('g')
  .classed('group', true)


let xScale = d3.scaleBand().domain(d3.range(5)).range([0, wid]).padding(0)

let rects = svg.selectAll('content')
  .data(
    d3.range(5)
    //data //(uncomment this, and comment line above to try loading images)
  )

rects.exit().remove();

rects.enter()
  .append("svg:image")
  .attr("xlink:href", d => d)
  .attr("class", "content")
  .attr("y", 0)
  .attr("x", (d, i) => xScale(i))
  .attr("width", "300px")
  .style("opacity", 1)
  .attr("stroke", "white")
  .style('fill', 'rgb(81, 170, 232)')
  .attr("height", 400);

let distortion = 10;

function fisheye(_, a) {
  let x = xScale(_),
    left = x < a,
    range = d3.extent(xScale.range()),
    min = range[0],
    max = range[1],
    m = left ? a - min : max - a;
  if (m === 0) m = max - min;

  return (left ? -1 : 1) * m * (distortion + 1) / (distortion + (m / Math.abs(x - a))) + a;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

我正在尝试制作如下所示的东西:
https://www.nytimes.com/newsgraphics/2013/09/13/fashion-week-editors-picks/index.html
我真的很感激一些帮助,让这个片段工作,如果可能的话,就像这个网站链接一样顺利!那是由 Bossstock 自己制作的,我是 d3 新手,所以我完全不了解。

最佳答案

我发现了我的问题-

let xScale = d3.scaleBand().domain(data).range([0,wid]).padding(0)
域是 d3.range(5)而不是我的data多变的。

关于javascript - 鱼眼效果 D3js 图像幻灯片适用于矩形/对象但不适用于图像文件,错误 : <image> attribute x: Expected length, "NaN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70207464/

相关文章:

javascript - 修改对象属性时如何触发回调?

javascript - 这是 eval 邪恶吗?

jquery - 如何使用 jquery 在页面顶部隐藏下拉菜单?

html - 添加 6 张照片后 CSS Image Slider 不工作

javascript - 显示部分相邻图像的 Slick Slide Carousel

javascript - 如何获取tensorflowjs中tf.toPixels()返回值的PromiseValue

javascript - 如何等待所有异步任务在 Node.js 中完成?

d3.js - D3 : Add element after delay, 然后转换

javascript - 为什么这些标签不可见

javascript - 在传单上用 d3 覆盖圆圈会导致位置不正确