我尝试实现一个javascript功能,在滚动时为图像序列设置动画。
我尝试通过以下链接使用脚本创建动画:https://www.jqueryscript.net/animation/jQuery-Plugin-To-Create-Image-Sequence-Animation-On-Scroll-Sequencer.html
我的问题是此脚本已经存在三年了,不能与jQuery 3.2.1一起使用。但是我必须使用更新得多的jQuery版本。
脚本代码如下:
/**
* jQuery-Sequencer
* https://github.com/skruf/jQuery-sequencer
*
* Created by Thomas Låver
* http://www.laaver.com
*
* Version: 2.0.0
* Requires: jQuery 1.6+
*
*/
(function($) {
$.fn.sequencer = function(options, cb) {
var self = this,
paths = [],
load = 0,
sectionHeight,
windowHeight,
currentScroll,
percentageScroll,
index;
if(options.path.substr(-1) === "/") {
options.path = options.path.substr(0, options.path.length - 1)
}
for (var i = 0; i <= options.count; i++) {
paths.push(options.path + "/" + i + "." + options.ext);
}
$("<div class='jquery-sequencer-preload'></div>").appendTo("body").css("display", "none");
$(paths).each(function() {
$("<img>").attr("src", this).load(function() {
$(this).appendTo("div.jquery-sequencer-preload");
load++;
if (load === paths.length) {
cb();
}
});
});
$(window).scroll(function() {
sectionHeight = $(self).height();
windowHeight = $(this).height();
currentScroll = $(this).scrollTop();
percentageScroll = 100 * currentScroll / (sectionHeight - windowHeight);
index = Math.round(percentageScroll / 100 * options.count);
if(index < options.count) {
$("img.sequencer").attr("src", paths[index]);
}
});
return this;
};
}(jQuery));
所以我已经将第37行更改为
$("<img>").attr("src", this).load(function() {
到
$("<img>").attr("src", this).on("load", function() {
进行此更改后,我的所有图像均已加载,但仍收到错误消息:Uncaught TypeError:cb不是函数
我还必须更改什么,因此脚本可以再次工作?
感谢任何提示。
答案 0 :(得分:2)
cb()
是一种在预加载器完成抓取图像后将调用的回调函数。
在您链接到的示例中,回调为:
function() {
$("div#preload").hide();
}
这很简单地隐藏了预加载器消息。
在上下文中,插件初始化为:
$("div#images").sequencer({
count: 128,
path: "./images",
ext: "jpg"
}, function() {
$("div#preload").hide();
});
由于您尚未提供如何调用此函数,因此我怀疑您缺少此函数回调。