在 React 中拖动 Div 中的图像时如何防止在新选项卡中打开

Posted

技术标签:

【中文标题】在 React 中拖动 Div 中的图像时如何防止在新选项卡中打开【英文标题】:How do I Prevent Opening in New Tab When Dragging Image/s in Div in React 【发布时间】:2021-12-17 14:23:03 【问题描述】:

我已经通过单击browser button 成功实现了添加多个图像。 我的问题是当我想拖动图像/图像时。它会打开一个新选项卡。如何防止它打开? 我已经输入了e.preventDefault(),但它仍然开放。

Codesandbox 在这里 CLICK HERE

    <Paper elevation=4 className=classes.mainContainer>
      <div
        className=classes.dropzone
        style=
          border: "2px dashed #000000"
        
        onDragOver=(e) => e.preventDefault()
        onDrop=(e) => uploadImage(e.currentTarget.files)
      >
        <div>
        </div>
        <div>
          <h3 className=classes.dragHereText>Drag & Drop Images here</h3>
          <p className=classes.or>or</p>
          <Button
            size="small"
            variant="contained"
            component="label"
            color="primary"
          >
            <input
              type="file"
              accept="image/*"
              multiple
              className=classes.uploadInput
              onChange=(e) => uploadImage(e.currentTarget.files)
            />
            Browse files
          </Button>
        </div>
      </div>
    </Paper>

【问题讨论】:

【参考方案1】:

首先,您还需要在 onDrop 处理程序上防止默认设置。此外,来自 onDrop 的事件与 onChange 事件不同,因此您需要以不同的方式处理它。这是一个例子:

const handleDrop = (e) => 
  // Note: preventDefault is on nativeEvent
  e.nativeEvent.preventDefault()
  if (!e) return;
  // Note: files are under nativeEvent.dataTransfer
  const files = e.nativeEvent.dataTransfer.files;
  const fileList = Array.from(files);
  const images = fileList.map((image) => (
    imageName: image.name,
    imageFile: image
  ));
  console.log(images);
;

并像这样传递事件:

<div
  className=classes.dropzone
  style=
    border: "2px dashed #000000"
  
  onDragOver=(e) => e.preventDefault()
  onDrop=(e) => handleDrop(e)
 >

【讨论】:

【参考方案2】:

希望下面的回答对你有帮助

请检查以下代码沙箱代码,这个解决方案对我来说很好..

工作解决方案

https://codesandbox.io/s/react-hook-form-materialui-forked-n6r5l?file=/src/App.js

【讨论】:

以上是关于在 React 中拖动 Div 中的图像时如何防止在新选项卡中打开的主要内容,如果未能解决你的问题,请参考以下文章

拖动png图像时是否可以删除背景颜色?

可拖动 DIV 中的 Fabricjs

使用 css 防止或禁用 div 中的自动图像调整大小(使用引导程序)

如何防止 React Native 中的静态图像在 iOS 上出现卡顿/异步加载

使用3D Touch防止在较新的iPad上拖动图像和链接

可拖动 div 内的图像在拖动时停止了我的拖放