zoukankan      html  css  js  c++  java
  • setTimeout用于取消多次执行mouseover或者mouseenter事件,间接实现hover的悬停加载的效果.

    Mouseenter在鼠标滑上去不会对其子元素也发生监听,

    Mouseover在鼠标滑上去会对其子元素发生监听.

    所以对于事件的监听,我们要看需求,这里是对父元素的监听,不需要对子元素做监听.就用mouseentermouseleave.

    mouseenter是不会对其里面的子元素做监听,所以我们对这个limouseentermouseleave的监听就是正确的.

    settimeoutmouseover事件

    function add_color(b){
        var x='#'+b;
        var num = $(x).index();
        //console.log(num);
        $(x).addClass("lihover").siblings().removeClass("lihover");
        if (num == 0) {
            $(x).addClass('blue');
        }
        else if (num == 1) {
            $(x).addClass('green');
        }
        else if (num == 2) {
            $(x).addClass('orange');
        }
    }
    
    $(function() {
        $("#topmenu li").mouseover(function () {
            var id = $(this).attr("id");
            timeout = setTimeout(function () {
                add_color("" + id + "");
            }, 400);
        }).mouseout(function () {
        clearTimeout(timeout);
            $(this).removeClass();
        });
    });

     分析:add_color是添加一个css样式的js函数.在鼠标移上去触发mouseover,400毫秒之后执行add_color的方法.这时在mouseout中添加clearTimeout的事件,这样如果没有到400毫秒之前就移出鼠标触发mouseout事件,那么就清除掉timeout,也就是不执行里面的那个add_color的方法,那么相应的css样式的效果也不会触发.这样类似就做到了鼠标悬停上达到400毫秒才会触发事件的错觉.而后面的那句

     $(this).removeClass();是针对触发了事件之后才移除css样式,逻辑上并不冲突.
    并且鼠标快速滑过的时候,不会让这些css样式触发
    (这里的样式是出现一个带颜色悬浮层,如果频繁滑动,会导致颜色一致切换,给人一种花屏的错觉),从而阻止了闪屏的发生.

     界面的悬浮层图例:

    
    

    我的项目中:研究了一下,发现之前的mouseovermouseout能够进入到悬浮层的原因,是因为li下的每个子元素都是连在一起的,没有settimeout的事件的时候,你在li里面滑动一下鼠标,(滑过的子元素)都会触发mouseovermouseout的事件,但是由于没有延时效果,连在一起,频繁来回触发,就看不出有什么区别.所以在设置 settimeout之后,cleartimeout(timeout)的事件中,他立马阻止了addcolor这个事件(显示悬浮层的事件)的发生.那么mouseover后就没有悬浮层的效果了.

  • 相关阅读:
    逆向工具的使用
    linux下用crunch工具生成密码
    Bugku--web-wp
    stegsolve.jar压缩包打开和使用方法
    华为eNSP无限井号#解决方法
    后渗透之meterpreter使用攻略
    后渗透2
    Raid磁盘阵列存储原理-数据恢复思路分析
    Office文档损坏或乱码如何修复
    遇到ZFS文件系统如此棘手的问题,这种办法简单又高效!
  • 原文地址:https://www.cnblogs.com/yinheng/p/5012553.html
Copyright © 2011-2022 走看看