我正在循环显示一系列图像,并且试图实现某种裸体过滤器,所以我使用的是nude.js,它可以在某种程度上检测裸体。这是代码:
// we're inside a loop
$(".images").prepend($("<img>").attr({src: whatever, id: uniqueid}).load(function(e) {
nude.load(e.target.id);
nude.scan(function(result) { if (!result) $(e.target).detach(); });
});
但是,它分离所有错误的图像,因为nude.js速度很慢,并且在循环进行后续迭代之后完成,从而分离了这些图像,而不是其正在处理的图像。
我试过使用函数工厂:
function generateCallback(arg) {
return function(result) { if (!result) $(arg).detach(); };
}
和
nude.scan( generateCallback(e.target) )
但同样的事情发生了。
我想要的是一个
load
事件,如果它似乎包含裸露内容,它将删除该图像。如何正确执行此操作?编辑:nude.js是这样的:
nude.load(imageid);
nude.scan(callback); // it'll pass true or false into the callback
另一个编辑:意外地从我发布的代码中省略了id设置,但是它在我的真实代码中,所以我在这里添加了它。
最佳答案
我怀疑这里的情况是,这种顺序处理不适用于nude.js。
查看udea.js code,我认为您的问题出在对nude.scan
的调用中。 nude.js有一个变量,用于存储扫描完成后要调用的函数。调用nude.scan(callback)
时,此变量设置为callback
。
从您的PasteBin中,似乎在第一个调用中按预期分配了回调,但是在第二个及后续调用中,它被替换了,因此为什么要分离第二个映像而不是第一个映像。