我没有在您的问题中看到包含错误的网站链接,但在您的个人资料中看到了一个网址,并去那里查看是否可能是那个。好像是……
IE 因在其 javascript 错误中提供不正确的行号而臭名昭著。错误实际上在第 125 行:
function onBefore(curr, next, opts, fwd) {
// If the page isn't loading or refreshing - initCycle == false (fixes auto unbinding of slide opts on load)
// If is last slide and next slide is fwd direction go to next project instead of wrapping cycle
if(opts.currSlide + 1 == opts.slideCount && fwd && !initCycle){
opts.end(opts); // <-- this line is failing b/c the end function is null
window.location = $('#next').find("a").attr("href");
}
// If is first slide, and next slide is bkwd direction go to prev project instead of wrapping cycle
else if(opts.currSlide + 1 == 1 && !fwd){
opts.end(opts); // <-- this also fails for the same reason
window.location = $('#prev').find("a").attr("href");
}
}
ops 对象中的end 函数为空,这就是错误所在。有趣的是,我也检查了 FF,那里也是如此,但在这种情况下,它似乎比 IE 恢复得更优雅。
从其余的代码中,我们并不完全清楚 onBefore 函数是如何被调用的。看起来它可能是循环插件本身。无论如何,无论调用发生在哪里,opts 对象似乎都没有填充您的函数所需的所有数据。
更新:
我查看了循环插件代码,opts.end 是插件用户必须提供的回调。因此,解决问题的方法是在创建循环对象时提供自己的回调(js 文件中的第 101 行)或删除代码中调用 end 函数的行。
针对 OP 的以下评论进行更新:
仔细检查后,您的代码实际上将完全按照您的要求执行,而无需调用 end 回调,因此您可以安全地删除这些行。该插件会在执行任何动画之前触发您的 onBefore 回调。而且由于您在从第一张幻灯片向后移动或从最后一张幻灯片向前移动时在浏览器中重新加载了一个新 url,它甚至永远不会到达淡入淡出动画,这是您的目标。
但是,要回答您关于如何将end 回调添加到原始循环对象的问题,您将完全按照为onBefore 和onAfter 所做的操作。使用您想要执行的任何代码创建一个函数,然后在传递给插件的对象哈希中包含end: yourFuncName。停止循环插件的另一种方法是$(selector).cycle('stop');。但同样,在您的情况下,这些都不需要。只需删除对end 的调用就可以了。