【问题标题】:Zoom Pan images with d3.js使用 d3.js 缩放平移图像
【发布时间】:2017-01-29 11:54:57
【问题描述】:

您好,我正在尝试对某些图像进行缩放和平移。我有这个链接的例子:http://bl.ocks.org/mbostock/3681006 主要区别在于他们绘制形状而不是图像。这是一个脚本,我做了什么

https://jsfiddle.net/t1gqg1m6/1/

var width = 960,
    height = 500;

var randomX = d3.random.normal(width / 2, 80),
    randomY = d3.random.normal(height / 2, 80);

var data = d3.range(2000).map(function() {
  return [
    randomX(),
    randomY()
  ];
});

var x = d3.scale.linear()
    .domain([0, width])
    .range([0, width]);

var y = d3.scale.linear()
    .domain([0, height])
    .range([height, 0]);

var canvas = d3.select("canvas")
    .attr("width", width)
    .attr("height", height)
    .call(d3.behavior.zoom().x(x).y(y).scaleExtent([1, 8]).on("zoom", zoom))
  .node().getContext("2d");

function zoom() {
  canvas.clearRect(0, 0, width, height);
  draw();
}

var img = new Image();
img.onload = function () {
    function draw(){
    for(var i=0;i<=500;i+=50){
        canvas.drawImage(img, i, 10, 50, 40);
    }
  }
  draw();
}

img.src = "http://static.dnaindia.com/sites/default/files/styles/half/public/2016/04/02/444652-google-photos-emoji-google-image-search-using-emoji-coolkengzz-shutterstock.jpg?itok=b1lBccFF";

如果有人可以提供帮助,那就太好了。提前谢谢你。

【问题讨论】:

  • 你有什么问题?

标签: image d3.js html5-canvas zooming


【解决方案1】:

使您的绘图函数全局化,以便可以从缩放函数和图像加载函数调用它。

function draw() {
  for (var i = 0; i <= 500; i += 50) {
    canvas.drawImage(img, x(i), 10, 50, 40);
  }
}

下一个而不是:

canvas.drawImage(img, i, 10, 50, 40);

应该是:

canvas.drawImage(img, x(i), 10, 50, 40);

以便缩放/平移正确计算新位置。

工作代码here

【讨论】:

  • TY 快速回答。嗯,这很奇怪。这修复了拖动部分,但图像现在没有缩放,它们相互脱离。我的想法是在实际图像保持在一起时对其进行缩放,也许我确实选择了错误的示例。
  • 是错误的例子,如果你想让它变大,那么你应该使用几何缩放而不是对称缩放例子:bl.ocks.org/mbostock/3680958
猜你喜欢
  • 2020-10-20
  • 1970-01-01
  • 2018-03-03
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
相关资源
最近更新 更多