我使用scrollTo
插件,我希望在工作警报功能之后滚动我想要的位置。我的原型代码就是这样。它不起作用,我的错误是什么?
$.when(function () {
$.scrollTo('#documentsFieldset', 1000);
}).done(function () {
alert('completed');
});
答案 0 :(得分:2)
$.when
仅接受deferreds和promises。不幸的是,$.scrollTo
没有返回任何内容,undefined
,因此无法正常工作。
当你做尝试将$.scrollTo
的结果传递给$.when
时,它会原谅你并将其视为“没有给予承诺”,并立即承诺。因此,您的done
回调会立即被调用,并且不会等待滚动完成。
一种解决方案是将回调作为第三个参数传递,或将其设置为第三个参数的onAfter
属性:
$.scrollTo('#documentsFieldset', 1000, function() {
alert('completed');
});
// or alternatively, e.g. if you need to pass more settings
$.scrollTo('#documentsFieldset', 1000, {
onAfter: function() {
alert('completed');
}
});
另一个解决方案是在$.scrollTo
周围创建一个包装器,它返回一个promise,这样你就可以在$.when
调用中愉快地使用它来将它与其他异步内容结合起来。我继续尝试,go check out the fiddle。
答案 1 :(得分:0)
您已在匿名函数中将scrollTo的调用包装,该函数不返回延迟对象。
如果您只想在完成scrollTo时做出反应,则以下就足够了:
$.when(
$.scrollTo("#selector", 1000)
).done(function(){
console.log("scroll finished");
});
击> <击> 撞击> 编辑: 我错误地认为$ .scrollTo会返回一个延迟对象 - 它不会! 但是API提供了回调。 所以解决方案看起来像这样:
$.scrollTo("#selector", 1000, {
onAfter: function() {
console.log("done!");
}
});