4

我正在尝试创建一个当鼠标靠近视口左侧时可见的菜单(比如距离左侧 100 像素,否则显示菜单隐藏)。它应该有点像 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');
        });
    }
});

似乎上面的编辑做了一点,问题是/是隐藏菜单时,动画必须完成。如果不是,并且您再次使用鼠标 < 100,那么它会卡住并且没有显示任何内容。

也许有人有更顺畅的解决方案?

4

2 回答 2

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');
       }
   });
于 2013-10-27T12:57:03.070 回答
1

您可以在左侧和右侧创建宽度为 100px 的 div,然后您可以在该 div 元素上使用 jquery mouseover 功能,并且该 div 将在菜单可见时切换

这是我的答案的 jsfiddle 链接http://jsfiddle.net/8LHFs最初来自http://tympanus.net/Blueprints/SlidePushMenus的 html 模板

HTML

<div class="toggle-menu"></div>

CSS

.toggle-menu{
    width: 100px;
    height: 1000px;
    position: fixed;
}

jQuery

$('.toggle-menu').on('mouseover', null, function(){
    $('#showLeft').click();
});
于 2013-10-27T12:55:13.650 回答