多语言展示
当前在线:1472今日阅读:23今日分享:25

jQuery动画特效、显示与隐藏BUG(闪烁)解决方法

jQuery是一款强大的JS库,提供了许多动态效果,使用时还不用考虑兼容性。但是如果你足够细心你就会发现这样一种情况:编写代码时,需要对某一元素,当鼠标移上去就显示弹出信息,移开隐藏信息,你可能会用mouseover和mouseout结合hide()、show()函数,这种方法没有问题。但如果你想要更好的效果比如控制显示隐藏过程的时间,此时如在函数传入时间参数,你就会发现,当你在添加了事件的元素上移动鼠标时,提示框会一直闪烁,若隐若现。今天,小编介绍一种解决办法。小编曾经为解决这个BUG找遍互联网站,未果,无人提及。
工具/原料
1

JS文件

2

电脑

3

代码编写器

4

示例下载:http://pan.baidu.com/s/1gdvKdFl

原因分析

jQuery之所以会产生上面所提到的闪烁问题,其根本原因就在于事件被绑定到了同一个元素上面,这样鼠标在经过的时候鼠标焦点在不断的变化,浏览器无法准确具体的判断鼠标所处的位置,从而导致了闪烁问题。

解决办法
1

下面两张图片是我做的示例图片,前面的是JS效果代码,后面的是HTML代码。需要说明的是一共用到了四种显示隐藏show/hide函数(传参和不传参),fadeIn/fadeOut(传参和不传参),fadeTo同理就不在赘述。大家可到我提供的地址下载示例。

2

因为事件绑定到了同一元素上才会致使闪烁的情况出现,所以只要我们将事件绑定在不同的元素上即可解决。但要注意的是,绑定到不同的元素上应确保元素是块级元素或具有块级元素的属性。先看HTML代码,我做了8个div分成两行进行效果对比。在div里面每个都包含一个隐藏的样式为hide的div(即我说的提示框),并分别给了ID。上面四个采用绑定时间到同一元素;下面四个则绑定到两个元素;

3

接下来看JS代码,分别和下面的对应。很明显的看到$('#6')、$('#7')、$('#8')将事件分开了进行绑定,mouseover绑定到本身,mouseout则绑定到了子元素。

4

运行之后,可以发现第6、7、8个div当鼠标经过然后移动到提示框上面没有出现闪烁的情况了。

5

说明:我做的是简单地展示。可以发下在此情况下678三个div鼠标只有从提示框中移开提示框才会消失。这就是分别绑定事件不足的一个地方。如果你想要实现当鼠标一出第678个div提示框也会隐藏的效果,你可以在div里面在嵌套一个div,然后将mouseout事件绑定到新嵌套的div上面即可解决。

注意事项

本经验属个人发现,个人原创,仅为学习之用,谢绝任何形式的转载与传播。

推荐信息