AS2:鼠标移动太快会混乱功能

时间:2011-05-31 14:36:56

标签: flash function actionscript actionscript-2 mousemove

我使用以下代码作为一组可滚动条的一部分,以便在拖动一个滚动条时相对于另一个条更改每个条。它一直有效,直到用户尽可能快地滑动条形码然后数字出错...我确定这个功能无法像鼠标一样快速处理,但是有人知道这个方法吗?

onClipEvent (load) {
    Symptoms_sliders = new Array(this._parent.slider1.slider, this._parent.slider2.slider, this._parent.slider3.slider, this._parent.slider4.slider, this._parent.slider5.slider);
    Food_sliders = new Array(this._parent.slider6.slider, this._parent.slider7.slider, this._parent.slider8.slider, this._parent.slider9.slider);
    for (i=0; i<Food_sliders.length; i++) {
        Food_sliders[i]._y = 75;
    }
    is_scrolling = 0;
    function Food_scroll_ratio() {
        init_scroll_diff = init_scroll_num-init_scroll._y;
        Slider_ratio = new Array();
        totalLeft = init_scroll_num;
        while (_global.init_moved != init_scroll._y) {
            for (i=0; i<Food_sliders.length; i++) {
                if (Food_sliders[i] != init_scroll) {
                    slider_pos = Food_sliders[i]._y;
                    percentageOf = ((100-init_slider_pos[i])/totalLeft)*100;
                    percentageMultiplier = 100/percentageOf;
                    trace(percentageMultiplier);
                    if (init_scroll_num == 0) {
                        scroll_change = Math.round(Math.abs(init_scroll_diff/3));
                    } else {
                        scroll_change = Math.round(Math.abs(init_scroll_diff)/percentageMultiplier);
                    }
                    if (percentageOf == Infinity) {
                        Food_sliders[i]._y = 100;
                    } else if (init_scroll_diff>0) {
                        Food_sliders[i]._y = init_slider_pos[i]+scroll_change;
                    } else if (init_scroll_diff<0) {
                        Food_sliders[i]._y = init_slider_pos[i]-scroll_change;
                    }

                }
            }
            _global.init_moved = init_scroll._y;

        }
    }
}
onClipEvent (mouseMove) {
    for (i=0; i<Food_sliders.length; i++) {
        Food_sliders[i].onPress = function() {
            startDrag(this, false, 0, 100, 0, 0);
            init_scroll_num = this._y;
            init_scroll = this;
            is_scrolling = 1;
            init_slider_pos = new Array();
            init_slider_pos.push(Food_sliders[0]._y);
            init_slider_pos.push(Food_sliders[1]._y);
            init_slider_pos.push(Food_sliders[2]._y);
            init_slider_pos.push(Food_sliders[3]._y);
        };
        Food_sliders[i].onRelease = Food_sliders[i].onReleaseOutside=function () {
            stopDrag();
            is_scrolling = 0;
        };
    }
    if (is_scrolling == 1) {
        Food_scroll_ratio();
    }
}

1 个答案:

答案 0 :(得分:0)

这个问题仍然存在,我不认为可以避免,但我使用另一个函数(Slider_checker),每当鼠标滚动滚动条鼠标空闲20ms后运行一次(20ms允许它确保完成Food_Scroll_ratio的所有循环,这样就不会干扰它并节省一些cpu周期。

这是我的最终代码:

onClipEvent (load) {
    Symptoms_sliders = new Array(this._parent.slider1.slider, this._parent.slider2.slider, this._parent.slider3.slider, this._parent.slider4.slider, this._parent.slider5.slider);
    Food_sliders = new Array(this._parent.slider6.slider, this._parent.slider7.slider, this._parent.slider8.slider, this._parent.slider9.slider);
    for (i=0; i<Food_sliders.length; i++) {
        Food_sliders[i]._y = 75;
    }
    is_scrolling = 0;
    Slider_check_interval = 0;
    var mouseTimerID:Number;
    var delay:Number = 50;
    var mouseMoveListener = new Object();
    mouseMoveListener.onMouseMove = function() {
        clearInterval(mouseTimerID);
        mouseTimerID = setInterval(Slider_checker, delay);
    };
    Slider_checker = function () {
        while (Slider_check_interval == 1) {
            count = 0;
            for (i=0; i<Food_sliders.length; i++) {
                count += 100-Food_sliders[i]._y;
            }
            if (count != 100 && count != 0) {
                mxm = Food_sliders[0];
                for (i=0; i<Food_sliders.length; i++) {
                    if (Food_sliders[i]._y<mxm._y) {
                        mxm = Food_sliders[i];
                    }
                }
                if (count>100) {
                    mxm._y += count-100;
                }
                if (count<100) {
                    mxm._y -= 100-count;
                }
            }
            Slider_check_interval = 0;
        }
    };


    Mouse.addListener(mouseMoveListener);
    function Food_scroll_ratio() {
        init_scroll_diff = init_scroll_num-init_scroll._y;
        totalLeft = init_scroll_num;
        Slider_check = new Array();
        for (i=0; i<Food_sliders.length; i++) {
            if (Food_sliders[i] != init_scroll) {
                slider_pos = Food_sliders[i]._y;
                percentageOf = ((100-init_slider_pos[i])/totalLeft)*100;
                percentageMultiplier = 100/percentageOf;
                if (init_scroll_num == 0) {
                    scroll_change = Math.round(Math.abs(init_scroll_diff/3));
                } else {
                    scroll_change = Math.round(Math.abs(init_scroll_diff)/percentageMultiplier);
                }
                if (percentageOf == Infinity) {
                    Food_sliders[i]._y = 100;
                } else if (init_scroll_diff>0) {
                    Food_sliders[i]._y = init_slider_pos[i]+scroll_change;
                } else if (init_scroll_diff<0) {
                    Food_sliders[i]._y = init_slider_pos[i]-scroll_change;
                }
            }
        }
        Slider_check_interval = 1;
    }
}
onClipEvent (mouseMove) {
    for (i=0; i<Food_sliders.length; i++) {
        Food_sliders[i].onPress = function() {
            startDrag(this, false, 0, 100, 0, 0);
            init_scroll_num = this._y;
            init_scroll = this;
            is_scrolling = 1;
            init_slider_pos = new Array();
            init_slider_pos.push(Food_sliders[0]._y);
            init_slider_pos.push(Food_sliders[1]._y);
            init_slider_pos.push(Food_sliders[2]._y);
            init_slider_pos.push(Food_sliders[3]._y);
        };
        Food_sliders[i].onRelease = Food_sliders[i].onReleaseOutside=function () {
            stopDrag();
            is_scrolling = 0;
        };

    }
    if (is_scrolling == 1) {
        Food_scroll_ratio();
    }
}