setTimeout用于取消多次执行mouseover或者mouseenter事件,间接实现hover的悬停加载的效果.
Mouseenter在鼠标滑上去不会对其子元素也发生监听,
Mouseover在鼠标滑上去会对其子元素发生监听.
所以对于事件的监听,我们要看需求,这里是对父元素的监听,不需要对子元素做监听.就用mouseenter与mouseleave.
mouseenter是不会对其里面的子元素做监听,所以我们对这个li做mouseenter和mouseleave的监听就是正确的.
带settimeout的mouseover事件
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样式触发(这里的样式是出现一个带颜色悬浮层,如果频繁滑动,会导致颜色一致切换,给人一种花屏的错觉),从而阻止了闪屏的发生.

界面的悬浮层图例:
我的项目中:研究了一下,发现之前的mouseover和mouseout能够进入到悬浮层的原因,是因为li下的每个子元素都是连在一起的,没有settimeout的事件的时候,你在li里面滑动一下鼠标,(滑过的子元素)都会触发mouseover和mouseout的事件,但是由于没有延时效果,连在一起,频繁来回触发,就看不出有什么区别.所以在设置 settimeout之后,在cleartimeout(timeout)的事件中,他立马阻止了addcolor这个事件(显示悬浮层的事件)的发生.那么mouseover后就没有悬浮层的效果了.
setTimeout用于取消多次执行mouseover或者mouseenter事件,间接实现hover的悬停加载的效果.的更多相关文章
- scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`
scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`.Children 原因:包名写成了trait,与trait关键字重名了: package ...
- jquery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
想要添加这个效果,先来弄明白页面的加载和事件执行顺序,看这个简单例子: <html xmlns="http://www.w3.org/1999/xhtml"> < ...
- C#动态编译代码,执行一个代码片段,或者从指定文件中加载某个接口的实现类
在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public clas ...
- jQuery里的mouseover与mouseenter事件类型区别
JQ里面有mouseover和mouseenter 2个事件类型干着差不多的活,用不好经常出现些小问题. 今天我解释一下原理: 事件类型翻译: mouseover 鼠标移上 mouseenter 鼠 ...
- Linux0.11内核--加载可执行二进制文件之3.exec
最后剩下最核心的函数do_execve了,由于这里为了简单起见我不分析shell命令的情况, /* * 'do_execve()'函数执行一个新程序. */ //// execve()系统中断调用函数 ...
- 浏览器中Javascript的加载和执行
在刚学习Javascript时曾对该问题在小组内做个一次StudyReport,发现其中的基础还是值得分析的. 从标题分析,可以加个Javascript的加载和执行分为两个阶段:加载.执行.而加载即浏 ...
- jquery mobile 请求数据方法执行时显示加载中提示框
在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更 ...
- 怎么样加快JavaScript加载和执行效率
概览 无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaScript 执行过程耗时越久,浏览器等待响应用户输入的时间就越长.浏览器在下载 ...
- js中页面加载完成后执行的几种方式及执行顺序
1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前两者本质上没有区别,第1种是第2种的简写方式.两个是docu ...
随机推荐
- Java中的方法应用
一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...
- PHP global 关键字
global关键字用于在函数内部访问全局变量. <?php $x = 5; $y = 10; function myTest(){ global $x,$y; $x = $x+$y; } myT ...
- .Net Globalization and Localization
随着互联网的发展日益壮大和活跃,网上购物交易越来越频繁,一个网站支持多种语言在所难免,所以国际化和本地化在现在的网站中的作用越来越大,一个网站的使用量和搜索量有可能受国际化的影响一点.所以在当今做一个 ...
- android .9图的作用
参考:http://www.cnblogs.com/lianghui66/archive/2013/01/08/2850581.html .9图的介绍 1.这种格式的图片是Android平台上一种被拉 ...
- js正则表达式大全(3)
正则表达式regular expression详述(一) 正则表达式是regular expression,看来英文比中文要好理解多了,就是检查表达式符 不符合规定!!正则表达式有一个功能十分强大而又 ...
- 【小月博客】 Html5 上传图片 移动端、PC端通用
在博客园注册账号有些天了,感觉有些许欣慰,自己写的东西有人在看,有人在评论很是开心.(ps: 满足一下虚荣心吧!) 废话不多说了,说一下今天给大家分享的是 html5上传图片.我们是在移动端使用的,但 ...
- using border-radius to make a worker
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- c语言函数, 函数调用及函数递归
1. 函数的定义: 返回值类型 函数名(形参列表) {函数体(函数的实现内容)}, 注意: 如果没有参数, 小括号也是必不可少的. 函数与函数之间可以嵌套调用(也就是在一个函数内部可以调用另外一个函 ...
- C#开发系统服务时用的定时器组件
写服务时,都需要为定时器写不少的代码,感觉很麻烦,今天把这些代码封装一下,希望能简化一下这方面的工作,把精力都集中在功能上 本定时器组件,每次只启动一个服务实例进行处理,而不会同时多次执行服务代码. ...
- XCode修改公司名称和作者名称
新建的文件最上方都会有一段类似如下的版权声明 // // ViewController.m // CBDemoProject001 // // Created by CB on 16/3/17. ...