d3.js的拖拽问题
Drag issue with d3.js
嗨,如果有人能帮助我这将是伟大的。我用d3.js做了一个缩放平移,它工作得很好:
function zoom() {
var e = d3.event
var scale = d3.event.scale;
canvas.save();
canvas.clearRect(0, 0, width, height);
canvas.beginPath();
canvas.translate(e.translate[0], e.translate[1]);
canvas.scale(scale, scale);
draw();
canvas.restore();
}
然后我想让图像只在画布区域内,我这样做:
function zoom() {
var scale = d3.event.scale;
var e = d3.event,
tx = Math.min(0, Math.max(e.translate[0], width - imgBG.width * e.scale)),
ty = Math.min(0, Math.max(e.translate[1], height - imgBG.height * e.scale))
canvas.save();
canvas.clearRect(0, 0, width, height);
canvas.beginPath();
canvas.translate(tx, ty);
canvas.scale(scale, scale);
draw();
canvas.restore();
}
下面是一个工作代码:https://jsfiddle.net/ux7gbedj/
问题是:例如,当小提琴加载时,我开始从左到右拖动,假设2次,图像不移动,这很好,但是当我试图从右向左拖动时,我必须拖动至少3次才能再次开始移动,所以我认为我没有做一些非常正确的事情。
您需要将受限的平移坐标(tx, ty)馈送回缩放行为对象,否则d3。事件平移坐标是无界的,最终你会发现图像粘在一个角落/边。也就是说,你会试图限制图像拖动到一个窗口,说-200 逻辑取自http://bl.ocks.org/mbostock/4987520
https://jsfiddle.net/ux7gbedj/1/...
// declare the zoom behaviour separately so you can reference it later
var zoomObj = d3.behavior.zoom().scaleExtent([1, 8]).on("zoom", zoom);
var canvas = d3.select("canvas")
.attr("width", width)
.attr("height", height)
.call(zoomObj)
.node().getContext("2d");
function zoom() {
var scale = d3.event.scale;
var e = d3.event,
tx = Math.min (0, Math.max(e.translate[0], width - imgBG.width * e.scale)),
ty = Math.min(0, Math.max(e.translate[1], height - imgBG.height * e.scale));
zoomObj.translate( [tx,ty]); // THIS
canvas.save();
canvas.clearRect(0, 0, width, height);
canvas.beginPath();
canvas.translate(tx, ty);
canvas.scale(scale, scale);
draw();
canvas.restore();
}
...
- 灯光问题(使用三个.js)
- angular js密码强度显示问题
- 我在启动我的节点时遇到问题.js IRC 机器人
- 节点中的 CORS 问题.js失败
- 关于骨干的几个问题.js
- 使用时刻验证日期时出现问题.js按格式
- 嵌入棋盘时遇到问题.js
- 在印象中面临问题.js旋转木马
- 高图表重新加载骨干网的问题.js
- 骨干问题.js和字母 ID 问题
- 重复出现问题(JS/HTML)
- 获取子字符串问题(js.或jquery)
- 实时滚动问题(JS)
- 事件处理问题JS
- CRM 2011 -动态更改表单问题- JS错误(无法执行代码…)
- 显示正确输出的问题.JS单选按钮的选择和添加
- 使用外部 dom 按钮在 Highchart 中向下和向上钻取的问题.js
- 复选框数组的问题 [JS, Jquery]
- 节点从 0.2.6 升级到 0.4.7 时出现超时问题.js
- 删除cookie问题JS-COOKIE