2010-07-13 3 views
3

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

Я создаю мой vTicker так:

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

А вот код vTicker:

/* 
* Tadas Juozapaitis ([email protected]) 
*/ 
(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); 

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

ответ

3

Короткий ответ: вы не можете. Функция 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

Есть ли строка - var ticker = $ ('# ticker1 div.rssBody'). VTicker(); - просто назначьте переменную тикера, или это нужно использовать вместо существующего кода создания, который у меня есть наверху? Спасибо за вашу помощь. – ben

+0

Не волнуйся, у меня все получилось. Большое вам спасибо за код, я очень ценю это. – ben

+0

@ben: Вы должны вызывать vTicker() только ** один раз ** для его создания. Если вы не можете назначить его переменной при ее создании, вы можете просто вызвать '$ ('# ticker1 div.rssBody'). VTickerMoveUp();' сделать ручную scrollie thingie. –

0

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

Смежные вопросы