gpt4 book ai didi

javascript - 传递带参数的可选回调函数

转载 作者:行者123 更新时间:2023-11-29 17:24:04 25 4
gpt4 key购买 nike

我正在尝试以不同的方式创建一个可以采用可选效果回调函数的小型滚动方法。想象一下,我可以运行 scrollToEl(el, flash) ,它会首先向下滚动到该元素并使其闪烁。我通常会怎么做?

这就是我所做的..但它并没有真正起作用。

scrollToEl : function(el, callback) {
// flash the selected product
var self = this;
$('html, body').animate({
scrollTop: el.offset().top - 50
}, 1000, 'swing', callback); // how to pass el here as well paired with callback?
}

flash : function(el) {
// flash the selected product
el.animate({
opacity : 0.4
}, 100, 'swing', function() {
el.animate({
opacity : 1
}, 1000, 'swing');
});
},

我想这样使用它:

var el = $('#element');
scrollToEl(el, flash); // how to pass in to the callback function flash?

最佳答案

你可以使用闭包:

scrollToEl : function(el, callback) {
// flash the selected product
var self = this;

// Get completion callback if any
var completion;
if (callback) {
completion = function() {
callback(el); // See below if you prefer `el` to be `this` in the callback
};
}
else {
completion = $.noop;
}
$('html, body').animate({
scrollTop: el.offset().top - 50
}, 1000, 'swing', completion);
}

关于关闭的更多信息:Closures are not complicated

如果您希望回调以this 形式接收元素,您可以使用jQuery.proxy。而不是你自己的包装函数:

scrollToEl : function(el, callback) {
// flash the selected product
var self = this;

$('html, body').animate({
scrollTop: el.offset().top - 50
}, 1000, 'swing', callback ? $.proxy(callback, el) : $.noop);
}

这是同一回事,因为 proxy 创建了一个函数。但它不会在调用 scrollToEl 的上下文中引入闭包。

关于javascript - 传递带参数的可选回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com