javascript - 舍入 x 和 y 后,Svg 元素有时会卡住

标签 javascript d3.js svg

我创建了一个可拖动的矩形。并使 x 和 y 仅是 10 的乘数(实现对齐网格效果):

  var x = 0
  var y = 0

  var width = 400
  var height = 400
  var drag = d3.behavior.drag()
    .on('drag', dragmove)


  var svg = d3.select('body').append('svg')
    .attr('width', width)
    .attr('height', height)

  svg.append('rect')
    .attr('class', 'bg')
    .attr('width', width)
    .attr('height', height)

  svg.append('rect')
    .attr('class', 'btn')
    .attr('width', 200)
    .attr('height', 50)
    .attr('transform', 'translate(' + x + ',' + y + ')')
    .call(drag)

  function dragmove () {
    var rectX = d3.transform(d3.select(this).attr('transform')).translate[0]
    var rectY = d3.transform(d3.select(this).attr('transform')).translate[1]
    var mouseX = rectX + d3.event.dx
    var mouseY = rectY + d3.event.dy
    var snappedX = Math.round(mouseX / 10) * 10
    var snappedY = Math.round(mouseY / 10) * 10

    console.log(snappedX)
    console.log(snappedY)

    d3.select(this)
      .attr('transform', 'translate(' + snappedX + ',' + snappedY + ')')
  }

矩形确实像卡在 handle 上一样移动,问题是它有时会卡住。不确定是什么原因造成的。有什么可能的方法来解决这个问题?

https://jsfiddle.net/alexcheninfo/qrhngr9v/1/

最佳答案

我喜欢这样:

制作一个全局变量来存储漂移:

    var dx = 0;
    var dy = 0;

在拖动移动中增加拖动 dx = dx+ d3.event.dx; dy = dy+ d3.event.dy;

然后与snaprange[10,-10]比较

if (dx > 10 || dx < -10){

在达到阈值时给出翻译。

if (dx > 10 || dx < -10){
                   var snappedX = rectX + dx;

                     dx = 0;
                     d3.select(this)
                        .attr('transform', 'translate(' + snappedX + ',' + rectY + ')')
                }

y 也一样

var rectX = d3.transform(d3.select(this).attr('transform')).translate[0]
        var rectY = d3.transform(d3.select(this).attr('transform')).translate[1]
        if (dy > 10 || dy < -10){
                   var snappedY = rectY + dy;
                     dy = 0;
                     d3.select(this)
                        .attr('transform', 'translate(' + rectX + ',' + snappedY + ')')
                }

工作代码here

希望这对您有所帮助!

关于javascript - 舍入 x 和 y 后,Svg 元素有时会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306915/

相关文章:

javascript - React 中的 Map 函数(err : TypeError: e. map is not a function)

javascript - 如何在不缩放绑定(bind)到时间轴的其他形状的情况下放大/缩小 d3.time.scale

javascript - d3.js Sankey 使用命名节点

javascript - 如何设置 Node 环境来运行涉及 `import ... from ...` 等语法的 ES6 代码?

javascript - 使用 Snap.svg 在 z 空间中移动 SVG 组

javascript - 具有透明度、多边形、读取图像像素的简单图形 API?

javascript - 如何将 2 个 JavaScript 数组连接成一个由这两个数组组合而成的新数组?

javascript - 如何将 DynamoDB JSON 转换为常规 Javascript 对象

javascript - iPad 上动态附加的 &lt;style&gt; 不触发 OnLoad 事件

javascript - 如何添加点击并拖动以缩放 SVG 中的图像?