2010-12-10 4 views
1

Я не уверен, можно ли спросить об этом здесь. Если нет, просто проголосуйте. Но я ищу мнение об эффективности моей функции соотношения сторон. Ниже приведена функция определения аспекта и ограничение размера изображения. Как я справился?Javascript code efficiency

function constrainTwoNumbers(options){ 

d = { 
    dir: 'either', // direction: 'auto', 'vertical' or 'horizontal'. What side of the image do you want to constrain? 
    orgw:0, 
    orgh:0, 
    target:100, 
} 

// merge the options with the default values 
o = $.extend(d, options); 

// create object to write results into 
var result = []; 

switch(o.dir){ 
    case 'either':  
     // no direction is set, limit the largest side. 
     // determine what the orientation is. 
     if(o.orgw > o.orgh){ //landscape 
      aspect = o.orgw/o.target; 
     }else if(o.orgw < o.orgh){ //portrait 
      aspect = o.orgh/o.target; 
     }else if(o.orgw === o.orgh){ // the image is square. Just pass both dimensions as targeted 
      result.w = o.target; 
      result.h = o.target; 
      return result; 
     }     
     break; 
    case 'horizontal':  
      aspect = o.orgw/o.target; 
     break; 
    case 'vertical':    
      aspect = o.orgh/o.target; 
     break; 
} 

result.w = Math.round(o.orgw/aspect); 
result.h = Math.round(o.orgh/aspect);  
return result; 
} 
+1

изменить свой комментарий, чтобы сказать «либо», а не «авто». – 2010-12-10 09:50:28

ответ

2

Вы могли бы конденсироваться его к одному if/else

function constrainTwoNumbers(options){ 

    var d = { 
     dir: 'either', // direction: 'either', 'vertical' or 'horizontal'. What side of the image do you want to constrain? 
     orgw:0, 
     orgh:0, 
     target:100 
    }; 

    // merge the options with the default values 
    var o = $.extend(d, options); 

    // create object to write results into 
    var result = []; 
    if ((o.dir === 'either' && o.orgw > o.orgh) || (o.dir === 'horizontal')) 
    { 
     aspect = o.orgw/o.target; 
    } 
    else 
    { 
     aspect = o.orgh/o.target; 
    } 

    result.w = Math.round(o.orgw/aspect); 
    result.h = Math.round(o.orgh/aspect);  
    return result; 
}