禁止在整个项目 HTML 页面中拖动图像

Posted

技术标签:

【中文标题】禁止在整个项目 HTML 页面中拖动图像【英文标题】:Disable dragging of image in entire project HTML pages 【发布时间】:2020-09-17 16:56:15 【问题描述】:

我想禁止拖动我的项目中的所有图像,它有大量图像。我在网上找到的结果是禁用特定图像。将draggable="false" 放在每个图像标签中会花费很多时间。所以我想要一个解决方案来一起禁用它们。

我已成功禁用此代码的拖动,但它在 Firefox 中仍然可以拖动。

img 
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-user-drag: none;
  user-drag: none;
  -webkit-touch-callout: none;

我已经浏览了Disable dragging an image from an html page,但没有找到我的问题的答案。

【问题讨论】:

【参考方案1】:

对于特定的图像,你可以这样做,它适用于所有browsers

<!-- right image (dragging disabled) -->
<img src="https://contribute.geeksforgeeks.org/wp-content/uploads/gfg-39.png" onmousedown="if (event.preventDefault) event.preventDefault()">

如果您希望您的所有图片在包括firefox 在内的所有浏览器中都不可拖动,那么几行 javascript 就可以为您做到这一点!

// register onLoad event with anonymous function
window.onload = function(e) 
  var evt = e || window.event, // define event (cross browser)
    imgs, // images collection
    i; // used in local loop
  // if preventDefault exists, then define onmousedown event handlers
  if (evt.preventDefault) 
    // collect all images on the page
    imgs = document.getElementsByTagName('img');
    // loop through fetched images
    for (i = 0; i < imgs.length; i++) 
      // and define onmousedown event handler
      imgs[i].onmousedown = disableDragging;
    
  
;

// disable image dragging
function disableDragging(e) 
  e.preventDefault();
<img src="https://contribute.geeksforgeeks.org/wp-content/uploads/gfg-39.png">

<img src="https://contribute.geeksforgeeks.org/wp-content/uploads/gfg-39.png">

<img src="https://contribute.geeksforgeeks.org/wp-content/uploads/gfg-39.png">

【讨论】:

【参考方案2】:

您可以将ondragstart 属性添加到单个图像和return false

如果你想处理多个图像

const imgs = document.getElementsByTagName('img');
for(let i = 0; i < imgs.length; i++ ) 
    imgs[i].setAttribute("ondragstart", "return false")

来自 React Synthetic events的注释

从 v0.14 开始,从事件处理程序返回 false 将不再停止事件传播。相反,应酌情手动触发 e.stopPropagation() 或 e.preventDefault()。

所以你需要添加到每个图像。

&lt;img src=source onDragStart=e =&gt; e.preventDefault() /&gt;

【讨论】:

这个答案比其他答案更有效率。它帮助我解决了这个问题。我希望这个问题对你来说不是很愚蠢。 如何在 REACT 中实现这个? @Kundan 你删除了接受答案的标签来询问如何在 React 中做到这一点?这不公平,你的问题中甚至没有提到 React 词:D 但如果你认为我删除它是因为我要求它进行 REACT,那么我将它放回去。我希望你喜欢我的问题。如果是,请投赞成票。

以上是关于禁止在整个项目 HTML 页面中拖动图像的主要内容,如果未能解决你的问题,请参考以下文章

禁止将图像从桌面拖动到 html

如何禁止mui-slider的拖动,只需点击转换列表

如何禁止mui-slider的拖动,只需点击转换列表

mui中选项卡切换中怎么禁止页面左右滑动

如何使用 jQuery 将可拖动项目居中放置在可放置的图像地图区域上?

texarea禁止拖动