1
Well, let’s say I have a link, that link is 150px by 150px. I would like you to click on any part of this link, open a menu, exactly in the part that was clicked, and when you take the mouse over this menu it "disappear" again!
1
Well, let’s say I have a link, that link is 150px by 150px. I would like you to click on any part of this link, open a menu, exactly in the part that was clicked, and when you take the mouse over this menu it "disappear" again!
3
The position where the click occurred (relative to the document) is passed in event.pageX
and event.pageY
.
An example of what it could look like:
Comments on the code
$('a.abre-menu').click(function(evt){
// evt aqui é o event que é passado pelo jQuery
$('.menu').hide(); // esconde todos os menus
$('.menu[data-menu-id="'+ $(this).data('menu-id') + '"]')
.hide()
.css({
// o 1 extra é para evitar que o "mouseleave" seja executado imediatamente caso o usuário mova o mouse para fora do menu na outra direção.
left: evt.pageX + 1,
top: evt.pageY + 1
})
.fadeIn(); // fadeIn() para mostrar o "menu". Pode ser substituído somente por show() ou qualquer outro efeito como "slideDown()", por exemplo.
return false;
});
$('.menu').mouseleave(function(){
// o "menu" sempre será fechado no evento "mouseleave"
$(this).fadeOut();
});
a {
width: 150px;
height: 150px;
background-color: #DDD;
display: block;
line-height: 150px;
text-align: center;
text-decoration: none;
}
#menu {
display: none;
position: absolute;
width: 200px;
height: 150px;
color: #FFF;
background-color: rgb(144,144,144);
}
#menu h1 {
margin: 0px;
padding: 5px;
background-color: rgb(88, 88, 88);
font-size: 18px;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="abre-menu">Algum link de teste</a>
<div id="menu">
<h1>Menu</h1>
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</div>
In the style that I did in this example, the only really important part is that #menu
must had position: absolute;
, otherwise the positioning will not work.
Updating:
Your question about how to create multiple links with a menu for each is interesting and requires only a few minor changes to the original code.
To associate the menu to the link just use the same value in the attribute data-menu-id
.
Example:
$('a.abre-menu').click(function(evt){
// evt aqui é o event que é passado pelo jQuery
$('.menu').hide(); // esconde todos os menus
$('.menu[data-menu-id="'+ $(this).data('menu-id') + '"]') // este selector pega todos os itens com atributo "data-menu-id" = ao data-menu-id do link clicado
.hide()
.css({
// o 1 extra é para evitar que o "mouseleave" seja executado imediatamente caso o usuário mova o mouse para fora do menu na outra direção.
left: evt.pageX + 1,
top: evt.pageY + 1
})
.fadeIn(); // fadeIn() para mostrar o "menu". Pode ser substituído somente por show() ou qualquer outro efeito como "slideDown()", por exemplo.
return false;
});
$('.menu').mouseleave(function(){
// o "menu" sempre será fechado no evento "mouseleave"
$(this).fadeOut();
});
a {
width: 150px;
height: 150px;
background-color: #DDD;
display: inline-block;
line-height: 150px;
text-align: center;
text-decoration: none;
}
.menu {
display: none;
position: absolute;
width: 200px;
height: 150px;
color: #FFF;
background-color: rgb(144,144,144);
}
.menu h1 {
margin: 0px;
padding: 5px;
background-color: rgb(88, 88, 88);
font-size: 18px;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="abre-menu" data-menu-id="menu1">Algum link de teste</a>
<div class="menu" data-menu-id="menu1">
<h1>Menu</h1>
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</div>
<a href="#" class="abre-menu" data-menu-id="menu2">Outro link de teste</a>
<div class="menu" data-menu-id="menu2">
<h1>Menu 2</h1>
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</div>
just one question! Let’s say I want to have several links, and several menus! Each link will have a menu! Do I need to add a script for each one? Because from what I’ve seen ('a. open-menu') calls $('. menu')
@ivanveloso I updated the question. Take a look.
Browser other questions tagged jquery
You are not signed in. Login or sign up in order to post.
You can use the $.mousedown() event and test whether the user has used the right button.then uses the clientX and clientY properties of Event. Finally you only need to add a div with position: Fixed and top: clientY and left: clientX
– Tobias Mesquita
Saying that would help!! But it would help if someone knew how to handle jquery! Because I don’t know anything about that!
– ivan veloso
Unfortunately I’m not able to make an example now, I just left a suggestion in case someone might develop it. In case no one shows up, tomorrow I’ll come up with an answer
– Tobias Mesquita