我正在写一个jQuery插件,我想让我的代码利用jQuery UI show(effect,[options],[speed],[callback])和hide(effect,[回调])函数,该函数可让您以漂亮的动画显示和隐藏元素.
但是,我还希望我的插件在无法使用jQuery UI的情况下正常降级,切换回使用标准jQuery API中存在的基本非动画show()和hide()函数.
我需要专门测试显示和隐藏功能,因为即使jQuery UI可用,它也可能是自定义版本,而没有包含Effects组件.
一开始我以为我可以做类似的事情:
if(typeof myelement.show('blind','slow') == 'undefined')
{
myelement.show('blind','slow');
}
else
{
myelement.show();
}
但是,当然这是行不通的,因为即使没有UI,show()仍然是一个函数,但它具有不同的签名-因此,无论哪种情况,typeof都会返回对象.
最佳答案
您可以检查如下效果:
function hasEffect(effect) {
return $.effects && $.effects[effect];
}
然后,您可以在任何地方使用它:
if(hasEffect('blind')) {
myelement.show('blind','slow');
} else {
myElement.show();
}
//or,you can shorten it further:
//$.fn.show.apply(myelement,hasEffect('blind') ? ['blind','slow'] : []);
You can view a demo here,选中/取消选中左侧的jQuery UI,然后在顶部单击“运行”以查看其运行情况.这是有效的,因为这样声明了效果:
$.effects.blind = function(o) { ...effecty stuff... };
例如,您看到“blind” here.我在上面的代码中同时检查$.effects和$.effects.effect的原因是您只能下载some of the effects when you download jQuery UI,因此可以解决这种情况.