Ответ 1
Задайте следующие свойства CSS для изображения:
user-drag: none;
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
Кто-нибудь знает, как сделать изображение не перетаскиваемым и не выбираемым - в то же время - в Firefox, не прибегая к Javascript? Кажется тривиальным, но здесь проблема:
1) Можно перетаскивать и выделять в Firefox:
<img src="...">
2) Таким образом, мы добавляем это, но изображение все еще можно выделить при перетаскивании:
<img src="..." draggable="false">
3) Таким образом, мы добавляем это, чтобы исправить проблему подсветки, но затем контрастивно, изображение снова перетаскивается. Странно, я знаю! Использование FF 16.0.1
<img src="..." draggable="false" style="-moz-user-select: none;">
Итак, кто-нибудь знает, почему добавление "-moz-user-select: none" может каким-то образом превзойти и отключить "draggable = false"? Конечно, webkit работает так, как ожидалось. Ничего нет в Interwebs об этом... Было бы здорово, если бы мы могли пролить свет на это вместе.
Спасибо!!
Изменить: Это связано с тем, что элементы пользовательского интерфейса непреднамеренно перетаскиваются и улучшаются удобство использования - а не какая-то неудобная попытка использовать схему защиты от копирования: -)
Задайте следующие свойства CSS для изображения:
user-drag: none;
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
Я забыл поделиться своим решением, я не мог найти способ сделать это без использования JS. В некоторых случаях @Jeffery A Wooden предложил CSS просто не прикрывать.
Это то, что я применяю ко всем моим контейнерам пользовательского интерфейса, нет необходимости применять к каждому элементу, так как он применяется ко всем дочерним элементам.
CSS:
.unselectable {
/* For Opera and <= IE9, we need to add unselectable="on" attribute onto each element */
/* Check this site for more details: http://help.dottoro.com/lhwdpnva.php */
-moz-user-select: none; /* These user-select properties are inheritable, used to prevent text selection */
-webkit-user-select: none;
-ms-user-select: none; /* From IE10 only */
user-select: none; /* Not valid CSS yet, as of July 2012 */
-webkit-user-drag: none; /* Prevents dragging of images/divs etc */
user-drag: none;
}
JS:
var makeUnselectable = function( $target ) {
$target
.addClass( 'unselectable' ) // All these attributes are inheritable
.attr( 'unselectable', 'on' ) // For IE9 - This property is not inherited, needs to be placed onto everything
.attr( 'draggable', 'false' ) // For moz and webkit, although Firefox 16 ignores this when -moz-user-select: none; is set, it like these properties are mutually exclusive, seems to be a bug.
.on( 'dragstart', function() { return false; } ); // Needed since Firefox 16 seems to ingore the 'draggable' attribute we just applied above when '-moz-user-select: none' is applied to the CSS
$target // Apply non-inheritable properties to the child elements
.find( '*' )
.attr( 'draggable', 'false' )
.attr( 'unselectable', 'on' );
};
Это было намного сложнее, чем нужно было.
Вы можете использовать свойство pointer-events
в вашем CSS и установить его равным 'none'
img {
pointer-events: none;
}
отредактированный
это заблокирует (щелкнет) событие. Так что лучшим решением будет
<img draggable="false" (dragstart)="false;" class="unselectable">
.unselectable {
user-drag: none;
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
}
В зависимости от ситуации часто бывает полезно сделать изображение фоновым изображением div
с CSS.
<div id='my-image'></div>
Затем в CSS:
#my-image {
background-image: url('/img/foo.png');
width: ???px;
height: ???px;
}
Смотрите JSFiddle для живого примера с кнопкой и другим параметром выбора.
Вероятно, вы можете просто прибегнуть к
<img src="..." style="pointer-events: none;">
Вы можете установить изображение в качестве фонового изображения. Так как он находится в div
, а div
недоступен, изображение будет недоступно:
<div style="background-image: url("image.jpg");">
</div>
Общее решение, особенно для браузера Windows Edge (как -ms-user-select: none; правило CSS не работает):
window.ondragstart = function() {return false}
Примечание. Это может помочь вам добавить draggable = false для каждого тега img, когда вам все еще нужно событие click (т.е. вы не можете использовать pointer-events = none), но не хотите, чтобы изображение значка перетаскивания появляются.
Я создал элемент div, который имеет тот же размер, что и изображение, и расположен поверх изображения. Затем события мыши не переходят к элементу изображения.