Reputation: 53
The idea is that x-coordinate of the mouse be tracked so when it goes within a certain threshold(250px) in this case to the left edge of the window it triggers the function "openNav", and closes it when the mouse leaves the 250px threshold.
I read a few forums and posts but can't seem to find much on how to use the ClientX function.The code below is just what I think how it should work, but it obviously doesn't. I would be delighted if anyone could give me some sort of idea or even example on how to execute the above.
Thank you in advance.
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
document.getElementById("main").style.marginLeft = "250px";
}
function closeNav() {
document.getElementById("mySidenav").style.width = "0";
document.getElementById("main").style.marginLeft = "0";
}
var x = e.clientX;
for (x - 250 <= 0) {
openNav()
}
body {
font-family: "Lato", sans-serif;
}
.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}
.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}
.sidenav a:hover {
color: #f1f1f1;
}
.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
#main {
transition: margin-left .5s;
padding: 16px;
}
@media screen and (max-height: 450px) {
.sidenav {
padding-top: 15px;
}
.sidenav a {
font-size: 18px;
}
}
<div id="mySidenav" class="sidenav">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a>
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">4</a>
</div>
<div>
<button class="button open" onclick="openNav()">OPEN</button>
</div>
<div id="main">
<h2>Courses</h2>
</div>
Upvotes: 0
Views: 191
Reputation: 12139
clientX
is not a function but a property of the mouse event.
Just observe the mousemove
event and trigger your function according to event.clientX
.
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
document.getElementById("main").style.marginLeft = "250px";
}
function closeNav() {
document.getElementById("mySidenav").style.width = "0";
document.getElementById("main").style.marginLeft = "0";
}
document.addEventListener('mousemove', function(event) {
console.log(event.clientX);
if (event.clientX < 250) {
openNav();
} else {
closeNav();
}
})
body {
font-family: "Lato", sans-serif;
}
.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}
.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}
.sidenav a:hover {
color: #f1f1f1;
}
.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
#main {
transition: margin-left .5s;
padding: 16px;
}
@media screen and (max-height: 450px) {
.sidenav {
padding-top: 15px;
}
.sidenav a {
font-size: 18px;
}
}
<div id="mySidenav" class="sidenav">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a>
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">4</a>
</div>
<div>
<button class="button open" onclick="openNav()">OPEN</button>
</div>
<div id="main">
<h2>Courses</h2>
</div>
In the above version the openNav() and closeNav() function will be uselessly called multiple times. You should have a flag that keeps track of the menu's state and only calls the appropriate function when needed.
Upvotes: 1
Reputation: 10148
Here is how you'll get the x-coordinates
. You can trigger anyother function based on whatever condition
document.addEventListener("mousemove", function(e){
document.getElementById("x").innerHTML = e.clientX
if(e.clientX > 250){
alert("Crossed")
}
});
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
document.getElementById("main").style.marginLeft = "250px";
}
function closeNav() {
document.getElementById("mySidenav").style.width = "0";
document.getElementById("main").style.marginLeft= "0";
}
<style>
body {
font-family: "Lato", sans-serif;
}
.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}
.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}
.sidenav a:hover {
color: #f1f1f1;
}
.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
#main {
transition: margin-left .5s;
padding: 16px;
}
@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="mySidenav" class="sidenav">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a>
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">4</a>
</div>
<div>
<button class="button open" onclick="openNav()">OPEN</button>
</div>
<div id="main">
<h2>Courses <small id="x"></small></h2>
</div>
</body>
</html>
Upvotes: 0
Reputation: 18292
clientX
is a property of a mouse event. You need to use it inside an event handler. So we just define en event handler for the entire document and:
document.addEventListener('mousemove', function(event) {
event.clientX < 250 ? openNav() : closeNav();
});
Upvotes: 0
Reputation: 46
just setup a div with the right size and position and then call your function on the mouse enter event
$('#myDiv').on("mouseenter", function (e) {
//your code
});
Upvotes: 2