2010-01-26 30 views
3

我正在使用Processing.js,jQuery 1.3.2可供我使用,並且針對Firefox 3.5,Safari 4和IE 8(通過ExplorerCanvas)。 Processing.js網站上說:「使用帶有Processing.js的Explorer Canvas通常會導致幀率不穩定,無法實現中等複雜的可視化效果。」那麼,在這種情況下,動畫不是必需的,只是一些簡單的素描,所以幀速率不是問題。每次在表單中輸入數據發生變化時,我只需要重繪()。我在那裏99%,只需一張靈感就可以控制IE!使用noLoop()處理Processing.js時,更好的基於事件的重繪()

keyPressed()完美地響應輸入字段中的更改,但在複選框中重新繪製更改,並且選擇字段不幸被延遲,直到按下實際按鍵。 mousePressed()僅在畫布中單擊時導致更新。用戶體驗有點生澀和混亂。如何讓草圖立即在任何鍵盤/鼠標事件上重繪?

CODE

在頁面的主要的JavaScript塊,我建立一個對象傳遞JSON數據是依賴於形式,並且Processing.js之間選擇字段,並且還用作把IE標誌的地方:

window.common = {}; 

我把布爾在「常用」對象瀏覽器使用「條件註釋」的劇本時,IE:

<!--[if IE]> 
    <script type="text/javascript"> 
     window.common.IE = true; 
    </script> 
<![endif]--> 

爲了完整起見,「共同」接收對象以這種方式JSON數據,使用jQuery的精彩功能的getJSON:

$.getJSON(xhr_url, function(json, status){ 
    /* 
     This is the equivalent of writing either 
     "window.common.global_d_b = json[d];" or 
     "window.common.global_d_c = json[d];" for 
     each property, such as "d," in the json object, 
     and subscripts "_b" or "_c". 
    */ 
    for (var property in json) { 
     window.common['global_' + property + subscript] = json[property]; 
    } 
}); 

的Processing.js設置是這樣的:

flag_for_IE = window.common.IE; 

void setup() 
{ 
    size(int(W), int(H));  // Canvas size as set above 
    frameRate(4);    // Refresh rate in fps for FF & Safari 
    stroke(darkSteelGrey);  // Set default linework color 
    fill(medSteelGrey);   // Set default fill color 
    background(lightBlue);  // Set background color 
    if (flag_for_IE) { 
     noLoop();    // Stop looping for IE. 
    } 
} 

抽籤循環開始就是這樣,得到需要的參數數據從表單直接:

void draw() { 

/* ***** ORDINARY DYNAMIC DATA FROM INPUT AND SELECT ELEMENTS ***** */ 
/* 
Some jQuery JavaScript is used here to get data provided by the user. Where 
necessary, invalid form entries are set equal to zero so the interactive 
sketching will be smoother. 
*/ 
    var tp = float($('#id_tp').val());  // End plate thickness 
    tp = isNaN(tp) ? 0.0 : tp; 
    var bp = float($('#id_bp').val());  // End plate width 
    bp = isNaN(bp) ? 0.0 : bp; 
    var db = float($('#id_db').val());  // Bolt diameter 

當形式的變化序幕AJAX請求,該數據進入這樣的拉伸()循環:

d_b = window.common.global_d_b; 
tf_b = window.common.global_tf_b; 

平局()循環後的是條件重繪邏輯:

/* Redraw control for IE. */ 
if (flag_for_IE) { 
    redraw(); 

    void keyPressed() { 
     redraw(); 
    } 

    void mousePressed() { 
     redraw(); 
    } 
} 

回答

2

要獲得重繪上的複選框,選擇字段,你可以將它們綁定到使用jQuery一個change事件。

$('#formid').find(':input').change(redraw); 
相關問題