Bir HTML sayfasında bir div var ve fareye her basıp hareket ettirdiğimde, imlecin bir şeyi seçtiği gibi "bırakılamaz" olduğunu gösterecek. Seçimi devre dışı bırakmanın bir yolu var mı? Başarısız olmadan CSS kullanıcı seçimini denedim.
Yanıtlar:
Tescilli varyasyonları user-selectçoğu modern tarayıcıda çalışacaktır:
*.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;
}
IE <10 ve Opera için, unselectableseçilememesini istediğiniz öğenin niteliğini kullanmanız gerekecektir . Bunu HTML'de bir öznitelik kullanarak ayarlayabilirsiniz:
<div id="foo" unselectable="on" class="unselectable">...</div>
Maalesef bu özellik miras alınmıyor, yani içindeki her öğenin başlangıç etiketine bir öznitelik eklemeniz gerektiği anlamına geliyor <div>. Bu bir sorunsa, bunun yerine JavaScript'i bir öğenin soyundan gelenler için yinelemeli olarak yapmak için kullanabilirsiniz:
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"));
-moz-nonegidilecek yol bu. Cevabımı düzelteceğim.
-moz-noneFirebug tarafından otomatik olarak tamamlanmıyor gibi görünüyor , ancak none: -moz-user-select: none(çalışıyor)
user-selectSadece metinle
Görünüşe göre CSS kullanıcı seçimi, resmin sürüklenip bırakılmasını engellemiyor ... bu yüzden ..
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;
});
});
Kullanıyorum cancelBubble=trueve stopPropagation()farede aşağı ve işleyicileri hareket ettiriyorum.
event.preventDefault() hile yapıyor gibi görünüyor (IE7-9 ve Chrome'da test edildi):
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);
});
});
Seçtiğiniz bir çeşit şeffaf görüntünüz var mı? Bir görüntüyü sürüklediğinizde genellikle "bırakılamıyor" simgesi görünür. Aksi takdirde, sürüklediğinizde normalde metni seçer. Öyleyse, görüntüyü z-endeksini kullanarak her şeyin arkasına yerleştirmeniz gerekebilir.