1

我正在使用扩展的 jQuery Plugin Boilerplate编写一个插件,该插件具有启动/停止在插件中运行的动画的公共方法;这个动画不是 CSS amin BTW,它只是一个计数器,所以我可以使用每个step.

动画从init()方法内部开始:

Plugin.prototype = {
    init: function () {
        // Place initialization logic here
        // You already have access to the DOM element and
        // the options via the instance, e.g. this.element
        // and this.options
        // you can add more functions like the one below and
        // call them like so: this.yourOtherFunction(this.element, this.options).
        console.log('init');

        $({ i: 0 }).animate({ i: 1000 }, {
            duration: 1000
        ,   step:     function () { console.log(this.i); }
        });
    },
    stop: function () { //yourOtherFunction: function () {
        // some logic
        console.log('stop');

        $(this.element).clearQueue();
        $(this.element).stop();
    }
};

并且确实开始很好,当被称为 like 时$('.some-elements').wheels();

我想要一种通过调用公共函数来暂停或停止此动画的方法,例如:

var timeout = window.setTimeout(function () {
    $('#total.cont-email-wheel').wheels('stop');
}, 500);

这个例子将在中途停止动画(我理解超时等的不准确性),但它没有;这就是我在这里的原因!

注意:stop在中途标记附近记录到控制台,因此该方法被正确调用。

我很确定,通过查看我需要调用的jQuery 文档clearQueue()stop()动画对象,在这种情况下,它是一个匿名对象 ( { i }),而不是元素,但我不知道如何做这个。

任何帮助将非常感激; 我试图尽可能简洁地解释,但如果不清楚,我会尝试在评论中澄清!

谢谢!

4

1 回答 1

0

clearQueue假设我需要在动画对象上调用and方法似乎是正确的,所以我使用属性进行了stop扩展,这样我就可以动画它而不是匿名对象。this.elementi

这意味着我现在可以调用clearQueuestop方法来暂停this.element对象上的动画,可以从插件中的任何方法访问该动画。

Plugin.prototype = {
    init: function () {
        // Place initialization logic here
        // You already have access to the DOM element and
        // the options via the instance, e.g. this.element
        // and this.options
        // you can add more functions like the one below and
        // call them like so: this.yourOtherFunction(this.element, this.options).
        console.log('init');

        $.extend(this.element, { i: 0 });

        $(this.element).animate({ i: 1000 }, {
            duration: 1000
        ,   step:     function () { console.log(this.i); }
        });
    },
    stop: function () { //yourOtherFunction: function () {
        // some logic
        console.log('stop');
        console.log($(this.element));

        $(this.element).clearQueue();
        $(this.element).stop();
    }
};

通过这样做,我现在不需要我自己的公共方法来停止动画,因为 jQuery 的本机stop()方法可以正常工作。此外,如果我想暂停/恢复动画,我现在可以使用大量可用的暂停/恢复插件。无需重新编写轮子!

于 2013-03-05T13:14:43.467 回答