css display vs visibility

手头一个网页碰到一个小小的毛病,网页内有多个div,每个div下有一个包含一些浮动按钮的div,效果就是那种鼠标浮动上去就显示浮动按钮,移开就隐藏

代码很简单(mootools):
[code]
el.addEvents({
'mouseover': function() {
buttons.setStyle('display', '');
},
'mouseout': function() {
buttons.setStyle('display', 'none');
}
});
[/code]

小毛病就是,用鼠标在这些div上快速晃来晃去,偶尔会出现卡一下的情况,就是延迟一点点时间再显示,或者根本来不及显示,最严重的移动进去都不显示,要重新再进去才恢复正常。但是按照平时操作时候的鼠标移动,不这么极端的干,实际上工作还是正常的

分析一番后猜测,这个毛病是由于dom reflow的毛病,老练的js程序员都应该知道,dom reflow是需要尽量避免的,设置display为none就会引起一次reflow操作,快速的mouseover再mouseout就会发生两次reflow,有可能会出现偶尔卡一下的现象

但是visibility hidden就不会引发reflow,仅仅会repaint一次,相对来说就快速多了
[code]
el.addEvents({
'mouseover': function() {
buttons.setStyle('visibility', 'visible');
},
'mouseout': function() {
buttons.setStyle('visibility', 'hidden');
}
});
[/code]
代码改成这样之后,快速晃动鼠标就再没有出现卡的毛病,以后如果可以用visibility的情况下,尽量用visibility,能省则省,js程序员都是吝啬鬼 ;)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值