Jquery,当鼠标靠近左侧时动画div

时间:2013-10-27 12:37:50

标签: jquery mouse panel

我正在尝试创建一个菜单,当鼠标靠近视口左侧时可以看到(比如从左边开始直到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然后它被卡住了,什么都没有显示出来。

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

2 个答案:

答案 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

HTML

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

CSS

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

Jquery的

$('.toggle-menu').on('mouseover', null, function(){
    $('#showLeft').click();
});