禁用 img 拖拽最有效方式是 ondragstart="return false" 并配合 CSS 的 user-drag: none 和 -webkit-user-drag: none;动态插入的图片需手动补监听。
HTML5 中的 元素在多数浏览器里默认支持拖拽(比如拖进另一个窗口

user-select: none 或 pointer-events: none —— 这些只影响选中和点击,对拖拽无效。
给 添加 ondragstart 事件并返回 false,能阻止拖拽起点触发。这是轻量、兼容性好(IE9+、所有现代浏览器都支持)且不影响图片显示和其它交互的方式。
@@##@@
ondragstart="return false",只写 ondragstart="false" 不生效event.preventDefault() 并返回 false
oncontextmenu
仅靠 ondragstart 在某些场景(比如 img 嵌套在可拖拽容器中)可能被绕过。加一层 CSS 配合 JS 更可靠:
img {
-webkit-user-drag: none;
user-drag: none;
}
-webkit-user-drag: none 是 Safari / Chrome 旧版私有属性,仍建议保留user-drag: none 是标准属性,但目前仅 Firefox 支持(截至 2025)ondragstart 使用如果图片只是装饰性用途(比如 banner 背景、icon),优先用 CSS background-image 替代 标签。这类图片天然不参与 DOM 拖拽流程,完全规避问题:
.hero-banner {
background-image: url("banner.jpg");
background-size: cover;
}
loading="lazy" 或响应式 sizes/srcset,灵活性下降 + alt + ondragstart
ondragstart="return false" 加上 user-drag: none 就已覆盖全部主流情况。真正容易被忽略的是:动态插入的图片(比如通过 innerHTML 或 Vue/React 渲染)不会自动继承这些属性,得在插入后手动补上事件监听或 class。