Hi jonib & Nathan,

Im thinking its going to impossible for me to get the function to loop
1 after the other since I calculate the time due to the random speed.

So maybe I should just make sure it loops every 10 seconds or so. I
already set the max length of each array instance to 28 characters, so
28x(0.35 sec max) = 9.8.

Either that or dump the random delay so I can calculate the exact time
its going to take. The BBC uses a setInterval function, so im
guessing .periodical() is the MooTools way?

On Oct 1, 2:17 am, jonlb <[EMAIL PROTECTED]> wrote:
> You might be able to make this work by using the mootools function
> periodical:
>
> http://mootools.net/docs/Native/Function/#Function:periodical
>
> It's just the beginning of a thought and I haven't fleshed it out much
> but it might help....
>
> jonlb
>
> On Sep 29, 1:34 pm, "liam.smart" <[EMAIL PROTECTED]> wrote:
>
> > Hi all,
>
> > Im new to MooTools and Javascript but I have accomplished a fair bit
> > in a short time. One thing I'm not really sure how to do, is loop a
> > function repeatedly. I have modified the code at the bottom to try and
> > get a looping version.
>
> > I am trying to create a news ticker like on the BBC website. Just now,
> > it just displays the last instance in the array, but I need to keep
> > cycling through all the instances in the array, and then start from
> > the start again.
>
> > I have thought about getting the length of the string, multiplying
> > that by the speed, and then doing a set-interval to call the function,
> > but the speed varies so that option will not work.
>
> > I then thought about doing a for loop and when x == the length of the
> > array, start the function again. But the ticker is just reading the
> > last instance.
>
> > I don't need some-one to do this for me, but just need pointed in the
> > right direction. Should I be using the .delay() method, or is
> > the .periodical() one the one I want? Do I need to create a chain? Its
> > a fair bit of code to post so will just post the important bits
> > (hopefully people can see what I'm trying to do here. After it has
> > went through the array, start again, but obviously the loop is
> > finishing quicker than the actual ticker, so that what makes me think
> > I need to chain the functions and set delays...):
>
> > [start code]
> > //initialization
> > initialize: function(options)
> > {
> >         //set options
> >         this.setOptions(options);
>
> >         //remove 'Hidden' class
> >         if(this.options.container.hasClass('Hidden'))
> >         {
> >                 this.options.container.removeClass('Hidden');
> >         };
>
> >         //retrieve/split/set new html
> >         this.options.initString = this.options.container.innerHTML
> >         this.options.splitString = this.options.initString.split(',');
> >         this.options.container.set('html','<span>Latest:</span>');
>
> > },
>
> > //start the blogTicker
> > start: function()
> > {
> >         //set new news items from split string
> >         this.options.message =
> > this.options.splitString[this.options.counter];
>
> >         //for every letter
> >         for(x = 0; x < this.options.message.length; x++)
> >         {
> >                 //spits out characters at random pace
> >                 var pace = (this.options.delay * x) +
> > $random(0,this.options.variance);
> >                 var current = this.options.message.charAt(x);
>
> >                 //spit out the letter or delete one if backChar is 
> > encountered
> >                 if(current != this.options.backChar)
> >                 {
> >                         var go = this.setLetter.delay(pace,this);
> >                 }
> >                 else
> >                 {
> >                         var go = this.deleteLetter.delay(pace +
> > this.options.backDelay,this);
> >                 };
> >         };
>
> >         if(this.options.counter > this.options.splitString.length-1)
> >         {
> >                 this.options.counter = 0;
> >                 this.initialize();
> >         }
> >         else
> >         {
> >                 this.options.counter++;
> >         };
>
> > },
>
> > //place the newest letter in the container
> > setLetter: function()
> > {
> >         //push string into the links now character by character
> >         this.options.container.set('html',this.options.container.get('html')
> > + '' + this.options.message.charAt(this.options.cursor));
>
> >         //increment cursor
> >         this.options.cursor++;},
>
> > [end code]
>
> > Like I said, I'm not here for a free ride, I just need pointed in the
> > right direction as I have seriously spent a lot of time trying
> > different things.
>
> > Many thanks,
> > Liam

Reply via email to