【问题标题】:Set the origin of element to center instead of top left (jquery)将元素的原点设置为中心而不是左上角(jquery)
【发布时间】:2022-02-10 16:55:46
【问题描述】:

我在三角形内有这个标记(这是一个简单的 div):

标记的中心应该正好位于三角形的中心。

如图所示,它并不完全在质心中(它有点偏右,可能在底部)。

我正在使用 jquery ui .draggable 方法。这是我的标记 css:

#marker {
  position: absolute;
  background: #808080;
  border-radius: 50%;
  width: 50px;
  height: 50px;
  cursor: grab;
}

这是我的 jquery 脚本:

$(document).ready(function () {
  var triangle = $("#triangle");
  var marker = $("#marker");
  var coord = getTriangleCoordinates(triangle);
  var center = centroid(coord);

  $("#marker").hover(
    function () {
      // over
      $(this).css("filter", "brightness(0.8)");
    },
    function () {
      // out
      $(this).css("filter", "brightness(1)");
    }
  );

  $("#marker").mouseup(function () {
    $(this).css("background", "salmon");
  });

  $("#marker").draggable({
    drag: function (event, ui) {
      var offset = ui.offset;
      if (!bounded(offset, coord)) return false;
    }
  });

  marker.css("left", Math.round(center.left) - 5 + "px");
  marker.css("top", Math.round(center.top) - 5 + "px");

  console.log(coord);
});

如何使标记的中心的默认位置恰好在质心中,同时仍然能够拖动标记?

我尝试了transform: translate(-50%, 0)css 属性。虽然它固定了位置,但它完全搞砸了拖动功能。

感谢任何帮助。谢谢!!

【问题讨论】:

  • 单个元素的 CSS 本身并没有告诉我们什么。我们甚至不知道绝对定位是指什么,视口或定位的祖先。请显示您的问题的正确minimal reproducible example

标签: javascript jquery css


【解决方案1】:

您的标记元素的宽度为 50 像素,高度为 50 像素。

假设您的质心函数返回正确的结果,然后您将标记的左上角(记住,它基本上是一个正方形)定位在距离实际质心仅 5 像素的偏移处。

它需要偏移一半的宽度和高度,使其中心点位于质心。

所以改变这个:

  marker.css("left", Math.round(center.left) - 5 + "px");
  marker.css("top", Math.round(center.top) - 5 + "px");

到这里:

  marker.css("left", Math.round(center.left) - 25 + "px");
  marker.css("top", Math.round(center.top) - 25 + "px");

对于更通用的解决方案,例如,如果标记的尺寸可能会随着视口大小或其他原因发生变化,您可以将左上角设置为质心,然后将transform: translate(-50%, 50%)。这会将标记向左和向上移动其宽度和高度的一半,无论它们是什么。

【讨论】:

  • 谢谢!这解决了定位问题。欣赏!
  • 我注意到标记并没有一直到三角形的左侧。它在右侧和底部过冲。设置transform: translate(-50%, -50%) 时,它会修复此行为,但是当将标记拖动到任何边缘时,拖动将完全停止。知道是什么原因造成的吗?如果有帮助,这里是 codepen:codepen.io/badijabbour/pen/ZEaWxMz
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2016-07-12
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
相关资源
最近更新 更多