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, unselectable
seç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-none
gidilecek yol bu. Cevabımı düzelteceğim.
-moz-none
Firebug tarafından otomatik olarak tamamlanmıyor gibi görünüyor , ancak none
: -moz-user-select: none
(çalışıyor)
user-select
Sadece 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=true
ve 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.