CSS / JS, чтобы предотвратить перетаскивание призрачного изображения? - PullRequest
111 голосов
/ 16 сентября 2011

Есть ли способ запретить пользователю видеть призрак изображения, которое он пытается перетащить (не забота о безопасности изображений, а восприятие).

Я пытался это исправить проблему с выделением синим цветом текста и изображений, но не с призрачным изображением:

img {
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -o-user-select: none;
  user-select: none;
}

(я также пытался вложить изображение в div с теми же правилами, что и для div). Спасибо

Ответы [ 13 ]

153 голосов
/ 16 сентября 2011

Для атрибута draggable можно установить значение false в коде разметки или JavaScript.Смотрите это демо .

<img id="myImage" draggable="false" src="http://placehold.it/150x150">
54 голосов
/ 13 сентября 2015

Я думаю, вы можете изменить

img {
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -o-user-select: none;
  user-select: none;
}

на

img {
  -webkit-user-drag: none;
  -khtml-user-drag: none;
  -moz-user-drag: none;
  -o-user-drag: none;
  user-drag: none;
}
14 голосов
/ 16 февраля 2018

Попробуйте:

img{pointer-events: none;}

и попытайтесь избежать

*{pointer-events: none;}
11 голосов
/ 21 апреля 2015

Вы можете использовать свойство CSS для отключения изображений в браузерах webkit.

img{-webkit-user-drag: none;}
9 голосов
/ 16 сентября 2011

Обработка события dragstart и return false.

8 голосов
/ 03 февраля 2015

Это отключит перетаскивание изображения в во всех браузерах , сохраняя при этом другие события, такие как нажатие и наведение.Работает, пока доступны любой из HTML5, JS или CSS.

<img draggable="false" onmousedown="return false" style="user-drag: none" />

Если вы уверены, что у пользователя будет JS, вам нужно использовать только атрибут JS,и т. д. Для большей гибкости посмотрите на ondragstart, onselectstart и некоторые CSS для WebKit.

4 голосов
/ 26 октября 2013

Вы можете назначить альтернативное изображение-призрак, если вам действительно нужно использовать события перетаскивания и вы не можете установить draggable = false. Так что просто присвойте пустой png вот так:

    $('#img').bind({
        dragstart: function(e) {
            var dragIcon = document.createElement('img');
            dragIcon.src = 'blank.png';
            dragIcon.width = 100;
            e.dataTransfer.setDragImage(dragIcon, -10, -10);
        }
    });
3 голосов
/ 16 сентября 2011

Поместите изображение в качестве фона пустого элемента или под прозрачным элементом.Когда пользователь нажимает на изображение, чтобы перетащить, он нажимает на div.

См. http://www.flickr.com/photos/thefella/5878724253/?f=hp

<div id="photo-drag-proxy"></div>
2 голосов
/ 01 ноября 2013

Для Firefox вам нужно пойти немного глубже с этим:

var imgs = document.getElementsByTagName('img');

    // loop through fetched images
    for (i = 0; i < imgs.length; i++) {
        // and define onmousedown event handler
        imgs[i].onmousedown = disableDragging;
    }

function disableDragging(e) {
        e.preventDefault();
    }

Наслаждайтесь.

1 голос
/ 28 декабря 2017

Здесь гораздо более простое решение, чем добавление пустых слушателей событий.Просто установите pointer-events: none для вашего изображения.Если вам все еще нужно, чтобы он был кликабельным, добавьте вокруг него контейнер, который вызывает событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...