随着这个动画变得越来越复杂,我不断添加参数,以便在每次回调时都可以使用它们。目前共有6个。
例如,现在我想在显示消息时禁用输入框,所以我必须添加另一个元素 - in_element;
致电:
Mo.C.movePane( cover_element, pane_element, 0, 0, 0, 'begin' );
功能:
movePane: function( cover_element, pane_element, start, end, index, state ) {
if( ( state === 'begin' ) ) {
start = parseInt( window.getComputedStyle( pane_element, null ).getPropertyValue("top"), 10 );
end = start + 40;
index = start;
state = 'down';
cover_element.style.display = 'inline';
Mo.C.movePane(cover_element, pane_element, start, end, index, 'down' );
}
if( ( state === 'down' ) && ( index < end ) ) {
index += 1;
pane_element.style.top = ( index ) + 'px';
setTimeout( function( ){ Mo.C.movePane(cover_element, pane_element, start, end, index, state ); }, 1 );
}
else if( ( state === 'down' ) && index === end ) {
state = 'up';
setTimeout( function( ){ Mo.C.movePane(cover_element, pane_element, start, end, index, state ); }, 2000 );
}
else if( ( state === 'up' ) && ( index > start ) ) {
index -= 1;
pane_element.style.top = ( index ) + 'px';
setTimeout( function( ){ Mo.C.movePane(cover_element, pane_element, start, end, index, state ); }, 1 );
}
else if( ( state === 'up' ) && ( index === start ) ) {
cover_element.style.display = 'none';
// signup_pass_input.addEventListener( "keypress", Mo.UserNew.enter, false );
}
}
};
可能的解决方案
object_all = {}
的单个对象中,并仅传递这一个变量。答案 0 :(得分:2)
当有多个参数时,使用对象是正常的。 下面是一个重构代码的示例:
function( cover_element, pane_element, opt ) {
var delay=1;
if (!opt) {
opt = {};
opt.start =
parseInt(
window.getComputedStyle( pane_element, null ).
getPropertyValue("top"),
10
);
opt.end = opt.start + 40;
opt.index = opt.start;
opt.state = 'down';
cover_element.style.display = 'inline';
}
switch(opt.state) {
case 'down':
opt.index += 1;
if (opt.index >= opt.end) {
opt.index = opt.end;
opt.state = 'up';
delay=2000;
}
break;
case 'up':
opt.index -= 1;
if (opt.index <= opt.start) {
cover_element.style.display = 'none';
opt = null;
}
}
if (opt) {
pane_element.style.top = ( opt.index ) + 'px';
setTimeout(
function( ){
Mo.C.movePane(cover_element, pane_element, opt);
},
delay
);
}
}
并称之为:
Mo.C.movePane(elem1, elem2);
切换方向时的延迟现在是2000而不是2001。
答案 1 :(得分:1)
@mVChr有正确的答案:传递一个具有各种参数属性的对象。这是一个标准范例,使许多接口非常干净。请参阅jQuery的$.ajax()
方法作为一个很好的例子。
答案 2 :(得分:1)
建议使用对象。你也可以按照下面给出的那样做
function movePane() {
var a = arguments; // to make it easy
var name = a[0];
var age = a[1];
var place = a[2];
console.log(name, age, place)
}
movePane("abc", 28, "def");
答案 3 :(得分:0)
根据评论答案:
使用对象o。请注意,您不必初始化对象属性即可使用它们。非常简洁。
var o = {};
o.cover_element = cover_element;
o.pane_element = pane_element
o.state = 'begin';
Mo.C.movePane( o );
return o_p;
},
movePane: function( o ) {
if( ( o.state === 'begin' ) ) {
// start
o.start = parseInt( window.getComputedStyle( o.pane_element, null ).getPropertyValue("top"), 10 );
o.end = o.start + 40;
o.index = o.start;
o.state = 'down';
o.cover_element.style.display = 'inline';
Mo.C.movePane( o );
}
else if( ( o.state === 'down' ) && ( o.index < o.end ) ) {
// move down
o.index += 1;
o.pane_element.style.top = ( o.index ) + 'px';
setTimeout( function( ){ Mo.C.movePane( o ); }, 1 );
}
else if( ( o.state === 'down' ) && ( o.index === o.end ) ) {
// pause
o.state = 'up';
setTimeout( function( ){ Mo.C.movePane( o ); }, 2000 );
}
else if( ( o.state === 'up' ) && ( o.index > o.start ) ) {
// move up
o.index -= 1;
o.pane_element.style.top = ( o.index ) + 'px';
setTimeout( function( ){ Mo.C.movePane( o ); }, 1 );
}
else if( ( o.state === 'up' ) && ( o.index === o.start ) ) {
// complete
o.cover_element.style.display = 'none';
}
}
};