作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试模仿 jQuery animate()
方法来去除不支持的浏览器(当然是 Internet Explorer)的 opacity
样式!
但是,我正在努力模仿 jQuery animate()
方法接受的参数。
根据 jQuery 文档:
.animate( properties [, duration] [, easing] [, complete] )
.animate( properties, options )
我想知道的是函数如何知道参数2是持续时间还是选项...?
注意这里的三个参数:
$('#test').animate({opacity:0},200,function(){
$(this).hide();
});
但我也可以像这样执行相同的函数(注意缓动参数):
$('#test').animate({opacity:0},200,'swing',function(){
$(this).hide();
});
函数如何知道第三个参数是字符串,而不是函数?
这肯定不是这样做的???
if(typeof parameter1=='string'){
// and so on
}
最佳答案
Surely this is not done like so????
if(typeof parameter1=='string'){
// and so on
}
是的,这就是它的做法。
<小时/>来自 jQuery 源代码:
var opt = speed && typeof speed === "object" ? jQuery.extend({},
speed) : {
complete: fn || !fn && easing || jQuery.isFunction(speed) && speed,
duration: speed,
easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
};
opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
可以这样重写以提高可读性:
var opt = { };
if (typeof speed == 'object')
opt = jQuery.extend({ }, speed);
else {
if (fn)
opt.complete = fn;
else if (easing)
opt.complete = easing;
else if (jQuery.isFunction(speed))
opt.complete = speed;
opt.duration = speed;
if (fn && easing)
opt.easing = easing;
else if (easing && !jQuery.isFunction(easing))
opt.easing = easing;
}
if (jQuery.fx.off)
opt.duration = 0;
else if (typeof opt.duration === 'number')
opt.duration = opt.duration;
else if (opt.duration in jQuery.fx.speeds)
opt.duration = jQuery.fx.speeds[opt.duration];
else
opt.duration = jQuery.fx.speeds._default;
<小时/>
如果您想要一种更简单的方法来处理这个逻辑,candy提供了一个简洁的数组助手,称为“persuade”。此函数允许您传入带有类型列表的数组(或参数
)对象。您将返回一个数组,其中包含按类型组织的参数。这是处理多态参数的简单方法:
function foo(/* duration, easing, complete */) {
var args = candy.Arrays.persuade(arguments, [ 'number', 'string', 'function' ]);
var duration = args[0], easing = args[1], complete = args[2];
console.log(duration, easing, complete);
}
foo('test');
// => undefined, 'test', undefined
foo(2, function() { });
// => 2, undefined, function() { }
关于javascript - 多态参数javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530565/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!