我正在尝试创建一个菜单,当鼠标靠近视口左侧时可以看到(比如从左边开始直到100px,显示菜单,否则隐藏)。它应该有点像Windows 8魅力吧。
我已经拥有以下内容,但效果并不好。
var mouse_position;
//GET MOUSE POSITION
$(document).mousemove(function (mouse_pointer) {
//$("body").on("mousemove", function(mouse_pointer) {
//console.log(mouse_pointer.pageX - $(window).scrollLeft());
//mouse_position = mouse_pointer.pageX - $(window).scrollLeft();
mouse_position = mouse_pointer.clientX;
//console.log(mouse_position);
if (mouse_position <= 100 && !$("#cms_bar").is(":visible")) {
//SLIDE IN MENU
$('#cms_bar').show().animate({
width: '100px'
}), 500;
console.log('menu shown');
} else if (mouse_position > 100 && $("#cms_bar").is(":visible")) {
$('#cms_bar').animate({
width: '0px'
}, 500, function () {
$(this).hide();
console.log('menu hidden');
});
}
});
显然我做错了。
修改
var mouse_position;
//GET MOUSE POSITION
$(document).mousemove(function(mouse_pointer) {
//$("body").on("mousemove", function(mouse_pointer) {
//console.log(mouse_pointer.pageX - $(window).scrollLeft());
//mouse_position = mouse_pointer.pageX - $(window).scrollLeft();
mouse_position = mouse_pointer.clientX;
//console.log(mouse_position);
if (mouse_position <= 100 && !$("#cms_bar").is(":visible")) {
//SLIDE IN MENU
$('#cms_bar').stop().show().animate({width: '100px'}), 300;
console.log('menu shown');
}
else if (mouse_position > 100 && $("#cms_bar").is(":visible")) {
$('#cms_bar').stop().animate({
width: '0px'
}, 300, function() {
//$(this).hide();
$(this).css("display","none")
console.log('menu hidden');
});
}
});
似乎上面的编辑做了一点,问题是,当隐藏菜单时,必须完成动画。如果没有,你再次使用鼠标&lt; 100然后它被卡住了,什么都没有显示出来。
也许有人有更顺畅的解决方案?
答案 0 :(得分:4)
我为此http://jsfiddle.net/ravikumaranantha/Wtfpx/2/创建了一个jsfiddle我使用左侧位置来隐藏它而不是可见性
HTML
<div id="cms_bar">hidden bar</div>
CSS
#cms_bar {
height:500px;
width:100px;
background-color:red;
position:absolute;
left:-100px;
top:0;
}
的JavaScript
var mouse_position;
var animating = false;
//GET MOUSE POSITION
$(document).mousemove(function (e) {
//$("body").on("mousemove", function(mouse_pointer) {
//console.log(mouse_pointer.pageX - $(window).scrollLeft());
//mouse_position = mouse_pointer.pageX - $(window).scrollLeft();
if (animating) {
return;
}
mouse_position = e.clientX;
console.log(mouse_position);
if (mouse_position <= 100) {
//SLIDE IN MENU
animating = true;
$('#cms_bar').animate({
left: 0,
opacity: 1
}, 200, function () {
animating = false;
});
console.log('menu shown');
} else if (mouse_position > 100) {
animating = true;
$('#cms_bar').animate({
left: -100,
opacity: 0
}, 500, function () {
animating = false;
});
console.log('menu hidden');
}
});
答案 1 :(得分:1)
你可以在左边和右边创建宽度为100px的div,然后你可以在那个div元素上使用jquery鼠标悬停功能,当菜单可见时该div将切换
这是我的答案的jsfiddle链接http://jsfiddle.net/8LHFs 哪个html模板最初来自http://tympanus.net/Blueprints/SlidePushMenus
<div class="toggle-menu"></div>
.toggle-menu{
width: 100px;
height: 1000px;
position: fixed;
}
$('.toggle-menu').on('mouseover', null, function(){
$('#showLeft').click();
});