如果我用fadeTogle替换fadeIn/fadeOut,为什么它不起作用
why does it not work if I replace fadeIn/fadeOut with fadeToggle
我有两个相同的jsfiddle,后者被fadeIn/fadeOut代替,而不是fadeTogle。
只需快速移动鼠标,并将最后一刻停留在黄色框上等待,红色元素不会消失。
奇怪。有人对此有解释吗?
http://jsfiddle.net/q6d57/5/ (工作)
$(document).ready(function(){
$(".box1").mouseenter(function(){
$('.box2').stop(true, false).fadeToggle(1500);
});
$(".box1").mouseleave(function(){
$('.box2').stop(true, false).fadeToggle(1500);
});
});
和
http://jsfiddle.net/q6d57/6/(不工作)
$(document).ready(function(){
$(".box1").mouseenter(function(){
$('.box2').stop(true, false).fadeIn(3000);
});
$(".box1").mouseleave(function(){
$('.box2').stop(true, false).fadeOut(3000);
});
});
将jquery版本更改为2.0.2
一开始我有点困惑,但在观看fadeIn
、fadeOut
和&fadeToggle
顺其自然。
jQuery对fadeIn
的作用似乎是检查html元素的display
属性。如果display
是none
,则fadeIn
通过将display
设置为block
并将opacity
从0漂移到1来淡入对象。因此,在您的代码中,当您来回移动鼠标时,它会停止fadeOut
,但由于display
仍然是block
,因此fadeIn
无法生效。
然而,fadeToggle
稍微聪明一点,检查opacity
,而不仅仅是display
属性。它不仅检查opacity
,而且可能保留最后一次执行淡入或淡出的标志,这样它就知道要执行另一个。
如果不深入研究jQuery库,这只是道听途说,但我相信这是在Chrome出色的调试器中玩过之后可能发生的唯一事情;)。
问题是您使用的fadeIn/Out带有非隐藏元素。这就是为什么你需要添加.hide()来使它工作。
检查这个小提琴:
http://jsfiddle.net/q6d57/10/
$(document).ready(function(){
$(".box1").mouseenter(function(){
$('.box2').stop(true, false).hide().fadeIn(3000);
});
$(".box1").mouseleave(function(){
$('.box2').stop(true, false).hide().fadeOut(3000);
});
});
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 为什么“;未定义的“;在JavaScript中结束循环
- 为什么这在IE中的工作方式与在Firefox中不同
- 知道为什么我的旋转木马不会自动更改图片吗
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 为什么在变形之前不缺少Fx
- Jquery FadeIn FadeOut 只工作一次
- 为什么JavaScript在for循环为3时向所有4发出警报
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- 为什么要使用0>javascript中的0
- 为什么无法在TypeScript中导出类实例
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 为什么忽略了eval()代码中的语法错误
- 为什么在画布上画线;t出现
- 如果我用fadeTogle替换fadeIn/fadeOut,为什么它不起作用
- 为什么嵌套的fadeOut不能在最外层fadeIn语句的同一元素上使用?