| Autor | Zpráva | ||
|---|---|---|---|
| Suta Profil |
#1 · Zasláno: 11. 1. 2012, 22:37:03 · Upravil/a: Suta
Věděl by někdo, jak vyzrát na Firefox a Operu v situaci, kdy kód pro deaktivaci výběru textu spouštím až při odpálení události onmousedown?
Deaktivace se mi projeví až při opětovném výběru textu (všech následujících událostí onmousedown), ale uchopím-li prvek (držím mousedown, přičemž ve stejném okamžiku dojde k deaktivaci výběru textu) a poté prvkem přesouvám, Opera a Firefox text vybírá a dojde tak k nežádoucímu efektu. |
||
| Str4wberry Profil |
#2 · Zasláno: 11. 1. 2012, 23:47:50
Neměl bys živou ukázku?
|
||
| Suta Profil |
#3 · Zasláno: 12. 1. 2012, 01:02:44
Živou ukázku nemám. Nicméně.. Dříve jsem používal kód zhruba na tomto principu (pro názornost zjednodušeno).
function stopSelectingText() {
document.onselectstart = function() {
return false;
}
document.ondragstart = function() {
return false;
}
document.onmouseup = function() {
document.onselectstart = null;
document.ondragstart = null;
document.onmouseup = null;
})
}
element.mousedown = function(e) {
stopSelectingText();
// --- při mousemove probíhá třeba přesun objektu ---
}Dnes jsem metodu stopSelectingText() - volanou při mousedown (při zahájení samotného posunu) vyměnil za metodu jQuery disableSelection volanou nad dokumentem, má naprosto stejný problém. Pokud však v kódu výše nespustím mouseup a nezruším tak zamezení výběru textu, při dalším mousedown už zamezení výběru textu funguje správně ve všech prohlížečích. Vím ještě, že opera zastaví výběr textu, pokud v mousedown vrátím return false. To si však dovolit nemůžu. |
||
| Chamurappi Profil |
#4 · Zasláno: 12. 1. 2012, 01:11:54
Reaguji na Sutu:
Většinou to dělám tak, že při onmousedown jednoduše zruším výběr:
if(document.selection && document.selection.empty)
{
document.selection.empty();
}
else if(window.getSelection)
{
var sel = window.getSelection();
if(sel && sel.removeAllRanges) sel.removeAllRanges();
}ondragstart někdy stornovávám, podle toho, co se přetahuje…)
„Dnes jsem metodu stopSelectingText() […] vyměnil za metodu jQuery disableSelection volanou nad dokumentem“ Což je docela zbytečná informace, když chybí popis, co a jak vlastně ta metoda disableSelection dělá.
|
||
| Suta Profil |
#5 · Zasláno: 12. 1. 2012, 01:36:45 · Upravil/a: Suta
Chamurappi:
No jo, funguje všude. Jen aktuálně vybraný text odznačí pouze při mousedown, při mousemove a pohybu objektem k vybírání textu opět dochází. Při navázání na mousemove funguje bezchybně všude, takže řešení mám, jen mírně hard-rockové. Pokud máš ještě něco lepšího, budu rád. Ale i tak díky moc, problém vyřešen (po stránce fungování ve (snad) všech prohlížečích). |
||
| peta Profil |
#6 · Zasláno: 12. 1. 2012, 14:52:40
onmouseover presmerujes udalost onmousedown na svuj script s return false. Neco podobneho najdes v prikladech na jakpsatweb, zakazani udalosti. Zakaz pouziva i Suta v prikladu nahore.
|
||
| Suta Profil |
#7 · Zasláno: 12. 1. 2012, 20:24:09
peta:
Dodatek bez přínosu. Suta, který nahoře používá příklad, jsem i já. A na tom samém místě o kousek dále pak Suta uvádí, že return false nemůže použít. |
||
| Chamurappi Profil |
#8 · Zasláno: 12. 1. 2012, 20:34:04
Reaguji na Sutu:
„při mousemove a pohybu objektem k vybírání textu opět dochází“ Překryj celou plochu průsvitnou plachtou, která další označení znemožní. „Pokud máš ještě něco lepšího, budu rád.“ Mám ještě -moz-user-select: none.
„o kousek dále pak Suta uvádí, že return false nemůže použít“ Proč vlastně nemůže? |
||
| Str4wberry Profil |
#9 · Zasláno: 12. 1. 2012, 20:52:52
„Mám ještě -moz-user-select: none.“
Když už to Chamurappi zmiňuje, tak by šlo také použít ::selection a výběr textu tak zakamuflovat.
|
||
| Suta Profil |
#10 · Zasláno: 12. 1. 2012, 21:29:29 · Upravil/a: Suta
Chamurappi:
„Proč vlastně nemůže?“ V určitých situacích, kdy zahájím přesouvání prvků a chci používat klasicky nastavený css:hover při přejíždění nad položkami, do nichž má být přesouvaný element vložen, mi Opera a ještě jeden (nevím teď který) prohlížeč css:hover nezobrazí díky nastavenému return false u mousedown nad dokumentem. Odstraněním return false tento problém odpadá. Vysvětlení neznám, vím jen, že jsem tuto příčinu dlouho hledal. Edit: „Překryj celou plochu průsvitnou plachtou, která další označení znemožní.“ Tento trik používám, jen v jiných případech. Obávám se, že css:hover efekt by opět nefungoval díky překrytí elementem s vyšším z-indexem, hlavně bych ale jako cíl mousetargetu měl stále tento překryvný div. Díky tobě i Str4wberrymu za přínosné postřehy. |
||
| peta Profil |
#11 · Zasláno: 13. 1. 2012, 08:36:55
Suta: Tak pro problemove prohlizece muzes zkusit kamuflovat i hover efekt pomoci onmouseover. Treba to bude fungovat. Ale u Opery bych na nejakou funkcnost cehokoliv moc nespolehal.
|
||
| Suta Profil |
#12 · Zasláno: 13. 1. 2012, 11:48:00
peta:
Pomocí mouseover by hover efekt fungoval, událostem najetí či odjetí z elementu se však obecně kvůli komplexnosti projektu snažím vyhnout co nejvíce. Nechám si to až jako poslední možnost. |
||
|
Časová prodleva: 14 let
|
|||
0