Как мне вызвать эту функцию, которая находится в плагине jquery? - PullRequest
3 голосов
/ 13 июля 2010

Я использую плагин jquery на своей странице, vTicker , "для простой и простой вертикальной автоматической прокрутки новостей".Я использую его в сочетании с плагином RSS JQuery.Работает нормально, но мне нужно создать кнопку, которая будет выполнять ручную прокрутку.Может кто-нибудь сказать мне, как это сделать?Я предполагаю, что мне нужно вызвать функцию moveUp из файла vTicker, но из-за способа создания функции, а также из-за того, как создается сам vticker, я не совсем уверен, как это сделать.

Я создаю свой vTicker следующим образом:

$('#ticker1').rssfeed(uRL).ajaxStop(function() {
$('#ticker1 div.rssBody').vTicker();
})

А вот код vTicker:

/*
* Tadas Juozapaitis ( kasp3rito@gmail.com )
*/
(function($){
$.fn.vTicker = function(options) {
    var defaults = {
        speed: 700,
        pause: 15000,
        showItems: 3,
        animation: '',
        mousePause: true,
        isPaused: false
    };

    var options = $.extend(defaults, options);


    moveUp = function(obj2, height){


        if(options.isPaused)
            return;

        var obj = obj2.children('ul');

        var iframe = $('#iFrame2');


        first = obj.children('li:first').clone(true);
        second = obj.children('li:odd:first').clone(true);

        iframe.attr('src', (second.children('h4').children('a').attr("href")));


        obj.animate({top: '-=' + height + 'px'}, options.speed, function() {
            $(this).children('li:first').remove();
            $(this).css('top', '0px');
        });

        if(options.animation == 'fade')
        {
            obj.children('li:first').fadeOut(options.speed);
            obj.children('li:last').hide().fadeIn(options.speed);
        }

        first.appendTo(obj);
    };

    return this.each(function() {
        var obj = $(this);
        var maxHeight = 0;

        obj.css({overflow: 'hidden', position: 'relative'})
            .children('ul').css({position: 'absolute', margin: 0, padding: 0})
            .children('li').css({margin: 0, padding: 0});

        obj.children('ul').children('li').each(function(){
            if($(this).height() > maxHeight)
            {
                maxHeight = $(this).height();
            }
        });

        obj.children('ul').children('li').each(function(){
            $(this).height(maxHeight);
        });

        obj.height(maxHeight * options.showItems);

        var interval = setInterval(function(){ moveUp(obj, maxHeight); }, options.pause);

        if(options.mousePause)
        {
            obj.bind("mouseenter",function(){
                options.isPaused = true;
            }).bind("mouseleave",function(){
                options.isPaused = false;
            });
        }
    });
};
})(jQuery);

Спасибо за чтение.

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Короткий ответ: нельзя.Функция moveUp полностью изолирована в области действия плагина, и вы не можете вызвать его напрямую.

Чтобы изменить плагин, чтобы вы могли прокрутить его вручную, добавьте его непосредственно перед строкой return this.each(function() {:

$.fn.extend({
  vTickerMoveUp: function() {
    var obj = $(this);
    var maxHeight = 0;
    obj.children('ul').children('li').each(function(){
        if($(this).height() > maxHeight) maxHeight = $(this).height();
    });
    moveUp(obj, maxHeight);
  }
});

Затем для прокрутки сделайте следующее:

var ticker = $('#ticker1 div.rssBody').vTicker();
ticker.vTickerMoveUp();
0 голосов
/ 13 июля 2010

Поскольку в объявлении перемещения отсутствует var, это означает, что moveup () будет статически определяться как свойство окна (т. Е. Глобального) после вызова vTicker. И поэтому я думаю, что вы могли бы позвонить moveup() из любой точки после этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...