代码笔记

为jQuery添加“鼠标停止时”方法

阅读

最近一个项目需要做待机屏保,琢磨了一下,js、jq里只能获取鼠标的进入、离开、移动,确没有办法获取鼠标的停止,于是乎,寻得方法,用以下方法来模拟鼠标的停止动作。

直接上代码:

(function($) {
    $.fn.moveStopEvent = function(callback) {
        return this.each(function() {
            var x = 0,
                y = 0,
                x1 = 0,
                y1 = 0,
                isRun = false,
                si, self = this;

            var sif = function() {
                    si = setInterval(function() {
                        if (x == x1 && y == y1) {
                            clearInterval(si);
                            isRun = false;
                            callback && callback.call(self);
                        }
                        x = x1;
                        y = y1;
                    }, 1000);
                }

            $(this).mousemove(function(e) {
                x1 = e.pageX;
                y1 = e.pageY;
                !isRun && sif(), isRun = true;
            }).mouseout(function() {
                clearInterval(si);
                isRun = false;
            });
        });
    }
})(jQuery);

首先将以上代码加入你的js库,ok了,接下来我们就可以用“.moveStopEvent”这个方法了。


看下示例:

$("body").moveStopEvent(function() {
    clearTimeout(timer);
    var timer = $(setTimeout(function() {
        $("#body-screen").show();
    }, 30000));
});
$("body").bind('mousemove', function() {
    $("#body-screen").hide();
});

30秒无操作,将“#body-screen”元素显示出来。

ok了,具体用法就自己去琢磨吧。


代码注释:

1.(function($){}(jQuery),声明一个匿名函数,并执行此函数,参数为jQuery对象。

2.$.fn.moveStopEvent=function(callback{}),为jQuery实例对象添加函数。

3.return this.each(function(){}),遍历jQuery对象集合中的每一个DOM元素对象,并且使用此对象作为上下文去执行函数,也就是说function中的this是指向每一个DOM对象的。

4.var x=0,y=0,声明变量x和y并赋初值为0,用来存储鼠标指针的上一个坐标。

5.var x1=0,y1=0,声明变量x1和y1并赋初值为0,用来存鼠标指针当前坐标。

6.var isRun = false,声明一个标记,说明鼠标指针是否在移动。

7.var timer=null,声明一个标记,作为定时器函数的返回值。

8.var self=this,将当前DOM对象的引用赋值给self变量。

9.var sif=function(){},声明一个函数用来判断鼠标指针是否停止运动。

10.timer=setInterval(function(){},500),每隔500毫秒执行一次函数,如果500毫秒内鼠标指针没有位置变化,就认定已经停止移动。

11.x = x1,y = y1,将鼠标指针的当前坐标存入x和y。

12.$(this).mousemove(function(e){}),为当前对象注册mousemove事件处理函数。

13.x1 = e.pageX,将当前鼠标指针横坐标存入x1.

14.y1 = e.pageY,将当前鼠标纵坐标存入y1.

15.!isRun && sif(),isRun = true,如果当前鼠标出于没有移动状态,那么就执行sif()函数,并且将isRun设置为true。也就是说当鼠标指针一直在移动的时候,保证只会执行一次sif()函数,否则可能会执行很多此此函数。

16.mouseout(function(){})注册mouseout事件处理函数,当然这是使用的链式调用。

17.clearInterval(timer),停止定时器函数的运行。

18.isRun = false,将变量的值设置为false,说明鼠标已经停止运动。





推荐阅读

JQuery筛选器备忘
JQuery筛选器备忘
用jquery刷新当前页面方法
用jquery刷新当前页面方...
jquery原生文章内图片展示
jquery原生文章内图片展...
jQuery FullPage.js全屏滚动插
jQuery FullPage.js全屏滚动...