【问题标题】:Drag and Drop on a scaled container在缩放的容器上拖放
【发布时间】:2020-03-04 06:23:39
【问题描述】:

我是 React 新手。我正在做一个项目,其功能之一是拖放

可拖拽组件应该是拖拽到容器上的,比如A.container,A也有放大缩小的功能。

我通过相应地改变它的比例来实现这个功能,以实现放大和缩小。为了实现放大,我将原始比例乘以 1 乘以 2。为了实现缩小,我将当前比例除以 2。

仅当比例设置为原始时,被放置的组件才会被放置在正确的鼠标位置。但是,当比例尺有一些不同的值时。放置的组件显示在远离鼠标位置的地方。

如何在所有其他尺度上实现正确的下降。

以下是我的功能代码。

我们将不胜感激

zoomIn = e => {
  if (this.state.scale == null) {
    this.setState({ scale: 1 });
  }
  this.setState({ scale: this.state.scale * 2 });
  console.log(this.state.scale);
  e.target.style.transform = `scale(${this.state.scale})`;
  e.target.style.transformOrigin = "-0% -0%";
  console.log(this.state.scale);
  out = 0;
  console.log(e.target.style.transform);
  console.log(e.clientX);
  var dragtarget1 = document.getElementById("dragtarget1");
  console.log(dragtarget1.style.left);
  console.log(e.target.getBoundingClientRect().offsetX);
};
zoomOut = e => {
  this.setState({ scale: this.state.scale / 2 });
  console.log(this.state.scale);
  if (this.state.scale === 2.5) {
    e.target.style.transform = `scale(${(this.state.scale = null)})`;
    out = 1;
    this.cood();
  } else {
    out = 0;
  }
  console.log(this.state.scale);
  e.target.style.transform = `scale(${this.state.scale})`;
  e.target.style.transformOrigin = "-0%,-0%";
};
drop = event => {
  event.preventDefault();
  var data = document.getElementById(event.dataTransfer.getData("Text"));
  event.target.appendChild(data);
  data.style.position = "fixed";
  data.style.left = (event.clientX - data.clientWidth / 2) / 2 + "px";
  data.style.top = (event.clientY - data.clientHeight / 2) / 2 + "px";

  //console.log(event.target.getBoundingClientRect())
  console.log(event);
  var dragtarget1 = document.getElementById("dragtarget1");
  setTimeout(function() {
    dragtarget1.classList.remove("hide");
  });
  var dragtarget2 = document.getElementById("dragtarget2");
  setTimeout(function() {
    dragtarget2.classList.remove("hide");
  });
  console.log(data.style.left);
};

【问题讨论】:

  • 也许你想探索 react-dnd。
  • 我不确定 scale 是否符合您的期望,除非您扩大宽度和高度。此外,您的代码使用原生 api,如 e.target.style、getElementById,这不是使用 React 的方式。

标签: javascript reactjs drag-and-drop scale


【解决方案1】:

如果您尝试放入容器 A 中的对象在您将其悬停在目标容器上时缩放到与其目标容器相同的变换属性怎么办? (在你放下它之前

【讨论】:

  • 我尝试将组件的比例设置为放置时容器的比例。但它不起作用。只是它的大小正在改变
  • 嗯好的。如果您能够在缩放容器中的任何位置放置项目(不限于网格),那么另一个想法可能是在悬停容器时使用鼠标坐标,然后在放置时使用这些坐标将对象与缩放容器一起放置.我没有创建这个 CodeSandbox,但这里有一个鼠标坐标示例:codepen.io/CarlosEME/pen/XWWpVMp
猜你喜欢
  • 1970-01-01
  • 2015-03-18
  • 2013-02-04
  • 1970-01-01
  • 2020-11-04
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多