有没有更好的方法来写这个,或更短的更紧凑的方式

时间:2012-02-27 23:29:37

标签: javascript jquery input for-loop raphael

我正在使用jsfiddle创建一个路径,该路径根据用户输入的数字循环一定次数。例如,用户输入的任何数字小于30 1个路径(一个瓶子)将在纸上绘制,用户输入的任何数字超过30个2个路径(2个瓶子)将在纸上绘制。最终我想让它继续最多10道路(10瓶)所以范围是(0-30,31-60,61-90 ...)目前它正在工作,但如果我写出整个事情,这将是很多代码,在我这样做之前,我想知道是否有任何新的方法可以缩短它。我确信有一种方法我无法理解。

http://jsfiddle.net/anderskitson/Gqbmk/

var paper = Raphael(document.getElementById("notepad"), 500, 500);

$("input").keyup(function() {
            var value = parseInt($(this).val());
            paper.clear();
    if (value > 30) {
                for (i = 0; i < 2; i++) {

               var randomNumber1 = Math.floor(Math.random()*200 +25);
               var randomNumber2 = Math.floor(Math.random()*200 +25);
               var randomNumber3 = Math.floor(Math.random()*25);
               var path_a = paper.path("M242.07,270.119c0,0-14.596-30.606-7.625-35.793 c3.864-2.876,2.145-18.561,1.832-18.784c-0.313-0.224-1.839-0.319-1.839-0.319c-1.555-0.192-0.201-3.456-0.201-3.456 s0,0-0.598-0.352c-0.598-0.351,1.129-1.345,1.129-1.345c3.738-2.785,10.449-2.983,11.126-2.344c0.677,0.64-0.354,1.44-0.354,1.44 s0.73,0.832,1.333,2.111c0.604,1.28-0.792,1.665-0.792,1.665c1.852,6.718,9.877,14.935,9.877,14.935 c4.795,0.589,7.7,10.683,7.7,10.683l6.271,22.746C269.929,261.307,263.641,270.119,242.07,270.119z");
               path_a.attr({fill: 'none',stroke: '#231F20',"stroke-width": '3',"stroke-miterlimit": '10','stroke-opacity': '1'}).data('id', 'path_a');
               path_a.translate(i*30, 10);
               path_a.rotate(randomNumber3);

            }//end of for statement
    }else{


            for (i = 0; i < 1; i++) {

               var randomNumber1 = Math.floor(Math.random()*200 +25);
               var randomNumber2 = Math.floor(Math.random()*200 +25);
               var randomNumber3 = Math.floor(Math.random()*25);
               var path_a = paper.path("M242.07,270.119c0,0-14.596-30.606-7.625-35.793 c3.864-2.876,2.145-18.561,1.832-18.784c-0.313-0.224-1.839-0.319-1.839-0.319c-1.555-0.192-0.201-3.456-0.201-3.456 s0,0-0.598-0.352c-0.598-0.351,1.129-1.345,1.129-1.345c3.738-2.785,10.449-2.983,11.126-2.344c0.677,0.64-0.354,1.44-0.354,1.44 s0.73,0.832,1.333,2.111c0.604,1.28-0.792,1.665-0.792,1.665c1.852,6.718,9.877,14.935,9.877,14.935 c4.795,0.589,7.7,10.683,7.7,10.683l6.271,22.746C269.929,261.307,263.641,270.119,242.07,270.119z");
               path_a.attr({fill: 'none',stroke: '#231F20',"stroke-width": '3',"stroke-miterlimit": '10','stroke-opacity': '1'}).data('id', 'path_a');
               path_a.translate(i*30, 10);
               path_a.rotate(randomNumber3);

            }//end of for statement

}//end of else statement

});

3 个答案:

答案 0 :(得分:2)

将冗余代码移动到单独的函数中。

此外,randomNumber1randomNumber2尚未使用。

var paper = Raphael(document.getElementById("notepad"), 500, 500);

function drawBottles(count) {
    for (i = 0; i < count; i++) {

       var randomNumber3 = Math.floor(Math.random()*25);
       var path_a = paper.path("M242.07,270.119c0,0-14.596-30.606-7.625-35.793 c3.864-2.876,2.145-18.561,1.832-18.784c-0.313-0.224-1.839-0.319-1.839-0.319c-1.555-0.192-0.201-3.456-0.201-3.456 s0,0-0.598-0.352c-0.598-0.351,1.129-1.345,1.129-1.345c3.738-2.785,10.449-2.983,11.126-2.344c0.677,0.64-0.354,1.44-0.354,1.44 s0.73,0.832,1.333,2.111c0.604,1.28-0.792,1.665-0.792,1.665c1.852,6.718,9.877,14.935,9.877,14.935 c4.795,0.589,7.7,10.683,7.7,10.683l6.271,22.746C269.929,261.307,263.641,270.119,242.07,270.119z");
       path_a.attr({fill: 'none',stroke: '#231F20',"stroke-width": '3',"stroke-miterlimit": '10','stroke-opacity': '1'}).data('id', 'path_a');
       path_a.translate(i*30, 10);
       path_a.rotate(randomNumber3);

    }//end of for statement
}

$("input").keyup(function() {
    var value = parseInt($(this).val());
    paper.clear();
    if (value > 30) {
        drawBottles(2);
    } else {
        drawBottles(1);
    }//end of else statement
});​

http://jsfiddle.net/Gqbmk/2/

答案 1 :(得分:1)

两个for循环看起来都一样。如果循环中的终点是唯一的diff,那么将其设置为变量并且只写入for循环1次。

    $("input").keyup(function() {
                var value = parseInt($(this).val());
                paper.clear();
       var endVal = value > 30 ? 2 : 1; //all values that change between the two define as such
       for (i = 0; i < endVal; i++) {
          var randomNumber1 = Math.floor(Math.random()*200 +25);
          var randomNumber2 = Math.floor(Math.random()*200 +25);
          var randomNumber3 = Math.floor(Math.random()*25);
          var path_a = paper.path("M242.07,270.119c0,0-14.596-30.606-7.625-35.793 c3.864-2.876,2.145-18.561,1.832-18.784c-0.313-0.224-1.839-0.319-1.839-0.319c-1.555-0.192-0.201-3.456-0.201-3.456 s0,0-0.598-0.352c-0.598-0.351,1.129-1.345,1.129-1.345c3.738-2.785,10.449-2.983,11.126-2.344c0.677,0.64-0.354,1.44-0.354,1.44 s0.73,0.832,1.333,2.111c0.604,1.28-0.792,1.665-0.792,1.665c1.852,6.718,9.877,14.935,9.877,14.935 c4.795,0.589,7.7,10.683,7.7,10.683l6.271,22.746C269.929,261.307,263.641,270.119,242.07,270.119z");
                   path_a.attr({fill: 'none',stroke: '#231F20',"stroke-width": '3',"stroke-miterlimit": '10','stroke-opacity': '1'}).data('id', 'path_a');
                   path_a.translate(i*30, 10);
                   path_a.rotate(randomNumber3);

      }//end of for statement
})

答案 2 :(得分:1)

GGG代码的Mod。使您能够以30步为单位继续运行

var stepping = 30;
var paper = Raphael(document.getElementById("notepad"), 500, 500);

function drawBottles (count) {
    for (i = 0; i < count; i++) {

       var randomNumber1 = Math.floor(Math.random()*200 +25);
       var randomNumber2 = Math.floor(Math.random()*200 +25);
       var randomNumber3 = Math.floor(Math.random()*25);
       var path_a = paper.path("M242.07,270.119c0,0-14.596-30.606-7.625-35.793 c3.864-2.876,2.145-18.561,1.832-18.784c-0.313-0.224-1.839-0.319-1.839-0.319c-1.555-0.192-0.201-3.456-0.201-3.456 s0,0-0.598-0.352c-0.598-0.351,1.129-1.345,1.129-1.345c3.738-2.785,10.449-2.983,11.126-2.344c0.677,0.64-0.354,1.44-0.354,1.44 s0.73,0.832,1.333,2.111c0.604,1.28-0.792,1.665-0.792,1.665c1.852,6.718,9.877,14.935,9.877,14.935 c4.795,0.589,7.7,10.683,7.7,10.683l6.271,22.746C269.929,261.307,263.641,270.119,242.07,270.119z");
       path_a.attr({fill: 'none',stroke: '#231F20',"stroke-width": '3',"stroke-miterlimit": '10','stroke-opacity': '1'}).data('id', 'path_a');
       path_a.translate(i*30, 10);
       path_a.rotate(randomNumber3);

    }//end of for statement
}

$("input").keyup(function() {
    var value = parseInt($(this).val());
    paper.clear();

    drawBottles(Math.floor(value/stepping));

});​