J'ai un div sur une page HTML et chaque fois que j'appuie sur la souris et que je la déplace, cela montrera que le curseur "ne peut pas déposer" comme s'il sélectionne quelque chose. Existe-t-il un moyen de désactiver la sélection? J'ai essayé la sélection d'utilisateur CSS sans succès sans succès.
Les variantes propriétaires de user-select
fonctionnera dans la plupart des navigateurs modernes:
*.unselectable {
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
/*
Introduced in IE 10.
See http://ie.Microsoft.com/testdrive/HTML5/msUserSelect/
*/
-ms-user-select: none;
user-select: none;
}
Pour IE <10 et Opera, vous devrez utiliser l'attribut unselectable
de l'élément que vous souhaitez ne pas être sélectionnable. Vous pouvez le définir à l'aide d'un attribut en HTML:
<div id="foo" unselectable="on" class="unselectable">...</div>
Malheureusement, cette propriété n'est pas héritée, ce qui signifie que vous devez mettre un attribut dans la balise de début de chaque élément à l'intérieur du <div>
. Si c'est un problème, vous pouvez utiliser à la place JavaScript pour le faire récursivement pour les descendants d'un élément:
function makeUnselectable(node) {
if (node.nodeType == 1) {
node.setAttribute("unselectable", "on");
}
var child = node.firstChild;
while (child) {
makeUnselectable(child);
child = child.nextSibling;
}
}
makeUnselectable(document.getElementById("foo"));
Il semble que la sélection par l'utilisateur CSS n'empêche pas le glisser-déposer de l'image ... alors ..
HTML:
<img src="ico.png" width="20" height="20" alt="" unselectable="on" /> Blabla bla blabla
CSS:
* {
user-select: none;
-khtml-user-select: none;
-o-user-select: none;
-moz-user-select: -moz-none;
-webkit-user-select: none;
}
::selection { background: transparent;color:inherit; }
::-moz-selection { background: transparent;color:inherit; }
JS:
$(function(){
$('*:[unselectable=on]').mousedown(function(event) {
event.preventDefault();
return false;
});
});
J'utilise cancelBubble=true
Et stopPropagation()
dans la souris vers le bas et déplace les gestionnaires.
event.preventDefault()
semble faire l'affaire (testé dans IE7-9 et Chrome):
jQuery('#slider').on('mousedown', function (e) {
var handler, doc = jQuery(document);
e.preventDefault();
doc.on('mousemove', handler = function (e) {
e.preventDefault();
// refresh your screen here
});
doc.one('mouseup', function (e) {
doc.off('mousemove', handler);
});
});
Avez-vous une sorte d'image transparente que vous sélectionnez? Habituellement, l'icône "ne peut pas tomber" apparaît lorsque vous faites glisser une image. Sinon, il sélectionne normalement le texte lorsque vous faites glisser. Si c'est le cas, vous devrez peut-être mettre l'image derrière tout en utilisant z-index.