如何在滚动条上修复jQuery图像序列

时间:2018-09-21 13:00:51

标签: javascript jquery animation

我尝试实现一个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不是函数

我还必须更改什么,因此脚本可以再次工作?

感谢任何提示。

1 个答案:

答案 0 :(得分:2)

cb()是一种在预加载器完成抓取图像后将调用的回调函数。

在您链接到的示例中,回调为:

  function() {
    $("div#preload").hide();
  }

这很简单地隐藏了预加载器消息。

在上下文中,插件初始化为:

  $("div#images").sequencer({
    count: 128,
    path: "./images",
    ext: "jpg"
  }, function() {
    $("div#preload").hide();
  });

由于您尚未提供如何调用此函数,因此我怀疑您缺少此函数回调。