0
votes

I am looking to add a self scroll feature to my scroll field that halts when a user mouses over the text or any of the controls. I am still very new to programming and have no idea how to go about it.

here is the code for the working scroll:

// ---- Scroll Bar Code ---- //    
fscommand("allowscale", "false");
bar.useHandCursor = dragger.useHandCursor=false;
space = 20;
friction = 0.9;
speed = 4;
y = dragger._y;
top = main._y;
bottom = (main._y + mask_mc._height) - (main._height - space);

//when scroll button is selected
dragger.onPress = function() {
    drag = true;
    this.startDrag(false, this._x, this._parent.y, this._x, this._parent.y + this._parent.bar._height - this._height);
    dragger.scrollEase();
};

//when scroll button is released
dragger.onMouseUp = function() {
    this.stopDrag();
    drag = false;
};

//when any of the scroll bar is pressed
bar.onPress = function() {
    drag = true;
    if (this._parent._ymouse > ((this._y + this._height) - this._parent.dragger._height)) {
        this._parent.dragger._y = this._parent._ymouse;
        this._parent.dragger._y = (this._y + this._height) - this._parent.dragger._height;
    } else {
        this._parent.dragger._y = this._parent._ymouse;
    }
    dragger.scrollEase();
};

//when scroll bar is released
bar.onMouseUp = function() {
    drag = false;
};

//when scroll button is dragged
moveDragger = function (d) {
    if ((dragger._y >= ((y + bar._height) - dragger._height) && d == 1) || (dragger._y <= y && d == -1)) {
        clearInterval(myInterval);
    } else {
        dragger._y += d;
        dragger.scrollEase();
        updateAfterEvent();
    }
};

//when up button is pressed
up_btn.onPress = function() {
    myInterval = setInterval(moveDragger, 18, -1);
};

//when down button is pressed
down_btn.onPress = function() {
    myInterval = setInterval(moveDragger, 18, 1);
};

//when up button is released
up_btn.onMouseUp = down_btn.onMouseUp = function () {
    clearInterval(myInterval);
};

MovieClip.prototype.scrollEase = function() {
    this.onEnterFrame = function() {
        if (Math.abs(dy) == 0 && drag == false) {
            delete this.onEnterFrame;
        }
        r = (this._y - y ) / (bar._height - this._height);
        dy = Math.round((((top - (top-bottom) * r) - main._y) / speed) * friction);
        main._y += dy;
    };
};


//End Scroll Bar Code
dragger.onRollOver = function() {
    dragger.useHandCursor = false;
}

// Start AutoScroll
var my_timedProcess:Number = setTimeout(autoScroll, 2000, "two second delay");

// Define AutoScroll
function autoScroll () {
    scrollInterval = setInterval(moveDragger, 150, 1);
}

//Stop AutoScroll on Rollover
mask_mc.onRollOver = down_btn.onRollOver = up_btn.onRollOver = dragger.onRollOver = bar.onRollOver = function () {
    clearInterval(scrollInterval);
};

//Start AutoScroll on RollOut
mask_mc.onRollOut = down_btn.onRollOut = up_btn.onRollOut = function () {
    scrollInterval = setInterval(moveDragger, 150, 1);
};
2

2 Answers

0
votes

Final Code for autoScroll:

// Start AutoScroll
var my_timedProcess:Number = setTimeout(autoScroll, 2000, "two second delay");

// Define AutoScroll
function autoScroll () {
    scrollInterval = setInterval(moveDragger, 150, 1);
}

//Stop AutoScroll on Rollover
mask_mc.onRollOver = down_btn.onRollOver = up_btn.onRollOver = dragger.onRollOver = bar.onRollOver = function () {
    clearInterval(scrollInterval);
};

//Start AutoScroll on RollOut
mask_mc.onRollOut = down_btn.onRollOut = up_btn.onRollOut = function () {
    scrollInterval = setInterval(moveDragger, 150, 1);
};
0
votes

First I'd like to say that you should consider using actionscript 3.0 rather than actionscript 2.0

Now to your question; That code is too bulky just for an auto scroll. If I understood your need correctly try my code and you should get a good start...

  1. Convert your paragraph/textarea to a movieclip and give it an instance name of textblock_mc
  2. Create another movieclip and give it an instance name of mask_mc
  3. And create a button and give it an instance name of up_button

on the timeline:

mask_mc._height = 100;  //---- edit to suit your need
var speed:Number = 1;  //---- change scroll speed 

var startOver = mask_mc._y = textblock_mc._y;
var endPoint = textblock_mc._height - mask_mc._height;
mask_mc._width = textblock_mc._width;   
mask_mc._x = textblock_mc._x;
var i:Number = 0;
textblock_mc.setMask(mask_mc);

textblock_mc.onRollOver = function(){  //---- add more buttons if needed here
    _root.onEnterFrame = scrollTxt;
}

textblock_mc.onRollOut = function(){  //---- add more buttons if needed here
    delete _root.onEnterFrame;
}

up_button.onRelease = function (){
    textblock_mc._y = startOver;
      i=0;
}
function scrollTxt(){
    i=i+speed;
    if(i >= endPoint){
        delete _root.onEnterFrame;
    } else {
        textblock_mc._y -= speed;
    }
}

That's all you need. Also you can reduce the code further if you place the mask_mc manually.