问题描述
|
我将以下代码用作一组可滚动条的一部分,以在拖动一个条时改变每个条相对于另一个条的关系。它会一直起作用,直到用户尽可能快地滑动该条,然后数字才出错...我确定这是该功能无法像鼠标一样快地进行处理,但是有人知道这种方法吗?
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,100,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();
}
}
解决方法
仍然会出现此问题,但我认为无法避免,但是我使用另一个函数(
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,100,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();
}
}