| Autor | Zpráva | ||
|---|---|---|---|
| sniclman Profil * |
#1 · Zasláno: 4. 9. 2012, 15:07:39
Dobrý den,
mám script pro otevření vlastního kontextového menu. http://matraux.com/test.php Použil jsem pro internet explorer styl filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#505050'); Nevím ale proč mi nefunguje pak hover pro text v kontextovém menu. Když nepoužiju stínování tak hover mi funguje v naprostém pořádku. Děkuji za rady. |
||
| ShiraNai7 Profil |
#2 · Zasláno: 4. 9. 2012, 15:52:48
sniclman:
V IE9 není problém. Pro starší IE (<9) doporučuji filtr vypnout podmíněným CSS.. jedná se o chybu v těchto verzích. <!--[if lte IE 8]><link href="oldie.css" rel="stylesheet" type="text/css" /><![endif]--> selektor {filter: none;} |
||
| Keeehi Profil |
#3 · Zasláno: 4. 9. 2012, 20:56:27
ShiraNai7:
Byl by nějaký odkaz, kdy by si člověk mohl přečíst o této chybě více? |
||
| Chamurappi Profil |
#4 · Zasláno: 4. 9. 2012, 21:57:44
Reaguji na sniclmana:
Proč používáš setAttribute? Opravdu je problém se stínem, nebo je příčina nefunkčnosti úplně jinde?
Reaguji na ShiraNaiho7: „jedná se o chybu v těchto verzích“ Jakou konkrétně? „Pro starší IE (<9) doporučuji filtr vypnout podmíněným CSS“ Divný postup. Devítka zná box-shadow, filter tam má jen kvůli starším verzím.
|
||
| ShiraNai7 Profil |
#5 · Zasláno: 4. 9. 2012, 22:06:56
Chamurappi:
„Divný postup. Devítka zná box-shadow, filter tam má jen kvůli starším verzím.“ No tak ať tam ten filter vůbec nedává, když rozbije hover.. „Jakou konkrétně?“ Že by chybu s hoverem? |
||
| sniclman Profil * |
#6 · Zasláno: 4. 9. 2012, 23:46:11
Chamurappi:
„Proč používáš setAttribute? Opravdu je problém se stínem, nebo je příčina nefunkčnosti úplně jinde?“ Ani nevím, zdálo se mi to dobré použít k document.createElement. Přečetl jsem si "Doporučuji užívat standardní vlastnosti HTML DOMu místo getAttribute/setAttribute" a předělal všechny setAttribute. Jen nevím jakou správnou syntaxi použít zde object.setAttribute("onmouseup", "contentObject(event, this);");ShiraNai7: „No tak ať tam ten filter vůbec nedává, když rozbije hover..“ No ale já řeším právě problém jak sloučit tyto dva styly dohromady. |
||
| Chamurappi Profil |
#7 · Zasláno: 7. 9. 2012, 03:01:14
Reaguji na sniclmana:
„Jen nevím jakou správnou syntaxi použít zde“ object.onmouseup = function(e)
{
contentObject(e || window.event, this);
};window.event, v jiných se předává objekt s popisem události jako argument, zápis e || window.event srovnává tuto nekompatibilitu (logické nebo v JavaScriptu vrací buď první pravdivou hodnotu, nebo false).
|
||
|
Časová prodleva: 3 dny
|
|||
| sniclman Profil * |
#8 · Zasláno: 10. 9. 2012, 13:34:51
Tak jsem to mírně předělal.
Text menu je samostatný DIV a stín tvoří také samostatný DIV. Kompletní kód pro zájemce. javascript: <script type="text/javascript">
/*VYPNUTÍ KONTEXTOVÉHO MENU PRO ELEMENT - NASTAVENÍ FUKNCE PRAVÉHO TLAČÍTKA*/
function contentMenu(object){
if(object.oncontextmenu == null){object.oncontextmenu = function(){return false;};
object.onmouseup = function(e){contentObject(e || window.event, this);};
object.onmouseover = function(){return false;};}}
/*FUNKCE PRAVÉHO TLAČÍTKA*/
function contentObject(e, object){
if (e.which == 3 || e.button == 2){/*detekce pravého tlačítka pro IE a Firefox*/
topPos = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop)+e.clientY+2;/*pozice Y kurzoru v objektu*/
leftPos = (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft)+e.clientX+2;/*pozice X kurzoru v objektu*/
setupCloseObject(false);
if(typeof(openedMenu) == "object"){closeObject(openedMenu)};/*zavření předchozího kontextového menu*/
/*vytvoření kontextového menu a funkce pro zavření*/
openedMenu = document.createElement('div');
openedMenu.style.cssText = "top: "+topPos+"px; left: "+leftPos+"px; position: absolute;";
openedMenu.onmouseover = function(){setupCloseObject(false);};
openedMenu.onmouseout = function(){setupCloseObject(true);};
/*nastavení stínu kontextového menu*/
shadowMenu = document.createElement('div');
shadowMenu.className = "shadowmenu";
/*libovolné položky kontextového menu*/
textMenu = document.createElement('div');
textMenu.className = "textmenu";
textMenu.innerHTML='<p>Zpět</p><p>Vpřed</p><p>Obnovit</p><p>Zastavit<hr><p>Přidat stránku do záložek</p>';
/*vložení kontextového menu*/
object.appendChild(openedMenu);
openedMenu.appendChild(shadowMenu);
openedMenu.appendChild(textMenu);
setupCloseObject(true);}
else{return false;}}
/*ZAVŘENÍ KONTEXTOVÉHO MENU*/
function closeObject(id){
if(typeof(id)!="object"){id = document.getElementById(id);}
if(id != null && id.parentNode != null){id.parentNode.removeChild(id);}}
/*KONTROLA POZICE KURZORU V KONTEXTOVÉM MENU*/
function setupCloseObject(setup){
if(setup){document.onmousedown = function(){closeObject(openedMenu);};}
else{document.onmousedown = null;}}
</script>style: <style type="text/css">
.shadowmenu {border: 1px #909090 solid; background-color: #FFFFFF; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; box-shadow: 3px 3px 2px #909090; filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#909090');}
.textmenu {width: 200px; padding: 3px; position: relative; cursor: default;}
.textmenu p {text-indent: 8%; font-family: arial; text-align: left; font-size: 13px; color: #000000; margin: 0px; padding: 0px;}
.textmenu p:hover {color: #FFFFFF; background-color: #5E81BC;}
</style>vložení elementu <div onmouseover="contentMenu(this);" style="border: 1px red solid; width: 100px; height: 100px;">Right click</div> |
||
|
Časová prodleva: 14 let
|
|||
0