2010-07-13 5 views
3

J'utilise un plugin jquery sur ma page, vTicker, "pour un défilement automatique des nouvelles vertical facile et simple". Je l'utilise en combinaison avec un plugin rss jquery. Cela fonctionne bien, mais j'ai besoin de créer un bouton qui fera un défilement manuel. Quelqu'un peut-il me dire comment faire cela? Je devine que je dois appeler la fonction moveUp du fichier vTicker, mais à cause de la façon dont la fonction est créée, ainsi que de la façon dont le vticker est créé, je ne suis pas vraiment sûr de la façon de le faire.Comment appeler cette fonction dans un plugin jquery?

Je crée mon vTicker comme ceci:

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

Et voici le code 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); 

Merci pour la lecture.

Répondre

3

La réponse courte est, vous ne pouvez pas. La fonction moveUp est totalement isolée dans le cadre du plugin, et vous ne pouvez pas l'appeler directement.

Pour modifier le plug-in afin que vous pouvez faire défiler manuellement, ajoutez juste avant la ligne 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); 
    } 
}); 

Ensuite, pour faire défiler, faites ceci:

var ticker = $('#ticker1 div.rssBody').vTicker(); 
ticker.vTickerMoveUp(); 
+0

La ligne var-ticker = $ ('# ticker1 div.rssBody'). VTicker(); - juste assigner la variable Ticker, ou est-ce que c'est à utiliser à la place du code de création existant que j'ai en haut? Merci de votre aide. – ben

+0

Ne vous inquiétez pas, je l'ai fonctionné. Merci beaucoup pour le code, je l'apprécie vraiment. – ben

+0

@ben: Vous devez appeler vTicker() seulement ** une fois ** pour le créer. Si vous ne pouvez pas l'assigner à une variable lorsque vous la créez, vous pouvez simplement appeler '$ ('# ticker1 div.rssBody'). VTickerMoveUp();' pour faire le truc manuel de scrollie. –

0

Depuis la déclaration moveup est manque un var cela signifie que moveup() sera défini statiquement comme une propriété de la fenêtre (ie, globale) une fois vTicker a été appelé. Et donc je pense que vous pourriez appeler moveup() de n'importe où après cela.

Questions connexes