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: 12 let
|
0