返回

拖动元素的边界,你需要知道的事

前端

在网页设计中,有时候我们需要让元素在限定的范围内拖动,例如一个对话框、一个侧边栏或者一个图片库。

我们可以使用HTML、CSS和JavaScript来实现这一操作,也可以使用一个叫做react-draggable的React库来简化操作。

使用HTML、CSS和JavaScript实现

<div id="draggable" style="position: absolute; left: 0; top: 0;">
  <p>Drag me!</p>
</div>
#draggable {
  width: 100px;
  height: 100px;
  background-color: #f00;
}
var draggable = document.getElementById('draggable');

draggable.addEventListener('mousedown', function(e) {
  var offsetX = e.clientX - draggable.offsetLeft;
  var offsetY = e.clientY - draggable.offsetTop;

  function moveAt(e) {
    draggable.style.left = (e.clientX - offsetX) + 'px';
    draggable.style.top = (e.clientY - offsetY) + 'px';
  }

  document.addEventListener('mousemove', moveAt);

  draggable.addEventListener('mouseup', function() {
    document.removeEventListener('mousemove', moveAt);
  });
});

使用react-draggable库实现

import React, { useRef } from 'react';
import { Draggable } from 'react-draggable';

const App = () => {
  const ref = useRef();

  const handleDrag = (e, data) => {
    // Be careful not to update state during the drag operation,
    // or you'll end up with a feedback loop.
    ref.current.style.transform = `translate(${data.x}px, ${data.y}px)`;
  };

  return (
    <Draggable onDrag={handleDrag}>
      <div ref={ref}>
        <p>Drag me!</p>
      </div>
    </Draggable>
  );
};

export default App;

我希望这篇博文能帮助你实现元素边界拖动功能。如果你有任何问题,请随时留言。