| Autor | Zpráva | ||
|---|---|---|---|
| Leo3 Profil |
#1 · Zasláno: 15. 6. 2017, 21:08:27
Potreboval by som poradit ohladom kontextoveho menu.
Ked kliknem pravym tlacidlom mysi kdekolvek na stranke, zobrazi sa kontextove menu. Po kliknuti na niektoru polozku v menu, alebo inde na stranke, tak menu zmizne. Co je dobre. Tu je priklad ako to funguje. Lenze potreboval by som nejak rozlisit, na ktoru polozku menu a ci vobec, bolo kliknute. Nejaka podmienka ak bolo kliknute na "Menu 1" tak, napr. vypis na konzolu console.log("Menu 1"); Ak bolo kliknute mimo toto menu, tak nech len zmizne menu.
html: <!DOCTYPE html> <html> <head> <title>Custom Right Click Context Menu</title> <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> </head> <body> //This is the menu block <div class="menu"> <ul> <a href="#"><li>Menu 1</li></a> <a href="#"><li>Menu 2</li></a> <a href="#"><li>Menu 3</li></a> <a href="#"><li>Menu 4</li></a> <a href="#"><li>Menu 5</li></a> </ul> </div> </body> </html> css: .menu{
width: 100px;
background: #000;
color: #fff;
position:absolute;
z-index: 999999;
display: none;
box-shadow: 0 0 10px #713C3C;
}
.menu ul{
list-style: none;
padding: 0;
margin:0;
}
.menu ul a{
text-decoration: none;
}
.menu ul li{
width: 88%;
padding: 6%;
background-color: #F04D44;
color: #fff;
}
.menu ul li:hover{
background-color: #F7BA4B;
color: #444343;
}JavaScript / jQuery (Pouzivam jQuery v3.1.1, v tomto priklade je jQuery v1.11.3, funguje to rovnako): $(document).ready(function () {
$("html").on("contextmenu",function(e){
//prevent default context menu for right click
e.preventDefault();
var menu = $(".menu");
//hide menu if already shown
menu.hide();
//get x and y values of the click event
var pageX = e.pageX;
var pageY = e.pageY;
//position menu div near mouse cliked area
menu.css({top: pageY , left: pageX});
var mwidth = menu.width();
var mheight = menu.height();
var screenWidth = $(window).width();
var screenHeight = $(window).height();
//if window is scrolled
var scrTop = $(window).scrollTop();
//if the menu is close to right edge of the window
if(pageX+mwidth > screenWidth){
menu.css({left:pageX-mwidth});
}
//if the menu is close to bottom edge of the window
if(pageY+mheight > screenHeight+scrTop){
menu.css({top:pageY-mheight});
}
//finally show the menu
menu.show();
});
$("html").on("click", function(){
$(".menu").hide();
});
});Zdrojove kody su aj tu. Vie niekto poradit? |
||
| Kcko Profil |
Udělej z toho živou ukázku, tak aby se tam snadno dalo něco modifikovat.
|
||
| Keeehi Profil |
Například
$(".menu a").on("click", function(){
console.log($(this).text());
});Důležitý je ten $(this). V čistém javascriptu (bez jQuery) je this.
|
||
| Leo3 Profil |
Kcko:
Prepac, neviem ako spravim zivu ukazku, ktora by sa dala modifikovat. Keeehi: Takze podmienka by mohla vyzerat nasledovne: $(".menu a").on("click", function(){
if ($(this).text() == 'Menu 1') {
console.log('Spustam funkciu pre Menu 1');
} else if ($(this).text() == 'Menu 2') {
console.log('Spustam funkciu pre Menu 2');
} else {
console.log('Klikol si inde');
}
});Este ma napadlo, ked bude stranka v roznych jazykoch a povedzme text pre Menu 1 bude rozdielny, bude namiesto "Menu 1" "Otvorit" alebo "Open", tak nebude vhodne porovnavat s textom ako som to ja spravil. Dala by sa nejak porovnavat premenna? |
||
| Keeehi Profil |
Leo3:
Dá se porovnávat cokoli. Proměnná těžko, jelikož HTML element žádnou proměnnou nemá, ale jakýkoli jeho atribut, cokoli v jeho obsahu a tak podobně, to problém nebude. Používáš tam odkazy (i když zbytečně, úplně dostatečné by byly ty li tagy), tak to můžeš rozlišovat na základě href atributu. V něm může být prakticky cokoli, překládat ho nebudeš a stejně se k tomu k čemu je určen nepoužije. |
||
|
Časová prodleva: 3 dny
|
|||
| Kcko Profil |
#6 · Zasláno: 19. 6. 2017, 15:23:36
Leo3:
Třeba tady? Živá ukázka |
||
|
Časová prodleva: 8 let
|
|||
0