2015-04-05 16 views
1

創建元素我寫這sctipt創建上現有帆布的折線圖:它打開生成的折線圖,畫布在新標籤與jQuery

var myLineChart = new Chart(ctx).Line(data, options); 

而且在動畫完成:

var options = { onAnimationComplete: function(){ 
        window.open(canvas.toDataURL()); 
       }} 

在這裏你可以測試一下:https://jsfiddle.net/ds53js5u/3/

什T I儘量做到:

是也使用jQuery

我更換生成畫布:

<canvas id="myChart" width="400" height="400"></canvas> 

有了:

var canvas = $('<canvas/>', {id: "myChart", width: 400, height: 400}); 

DEMO:https://jsfiddle.net/ds53js5u/4/

但現在它不再生成DataUrl並在新窗口中打開它!我錯了什麼?

對我來說畫布從來沒有被繪製到文檔上很重要!

THANKS

+0

https://jsfiddle.net/hqq4sv9h/1/ – Gael 2015-04-05 07:05:24

+0

PS,爲什麼等待動畫完成,因爲你不」 t要它可見?添加'animation:false'到''選項' – 2015-04-05 07:06:34

回答

1

沒有什麼不對您的元素創建語法。但是你試圖在jQuery對象上執行一個DOM方法。使用方法:

canvas[0].toDataURL(); // => "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAEYklEQ…mqBCVAwGD5AQIEMgIGK1OVoAQIGCw/QIBARsBgZaoSlACBB1YxAJfjJb2jAAAAAElFTkSuQmCC" 
+0

對不起,但它好像什麼都不做:https://jsfiddle.net/ds53js5u/8/ – 2015-04-05 14:55:06

+1

你需要將你創建的元素追加到html頁面: '變種畫布= $( '',{ID: 「myChart」,寬度:400,高度:400});' '$( '主體')附加(帆布);' 。 'console.log(canvas [0] .toDataURL());' – 2015-04-05 22:21:06

0

嘗試使用這個腳本:

var canvas = $('<canvas/>', {id: "myChart", width: 400, height: 400}); 

var ctx = canvas[0].getContext("2d"); 


var data = { 
    labels: ["January", "February", "March", "April", "May", "June", "July"], 
    datasets: [ 
     { 
      label: "My First dataset", 
      fillColor: "rgba(220,220,220,0.2)", 
      strokeColor: "rgba(220,220,220,1)", 
      pointColor: "rgba(220,220,220,1)", 
      pointStrokeColor: "#fff", 
      pointHighlightFill: "#fff", 
      pointHighlightStroke: "rgba(220,220,220,1)", 
      data: [65, 59, 80, 81, 56, 55, 40] 
     } 
    ] 
}; 

var options = {onAnimationComplete: function(){ 
       window.open(canvas[0].toDataURL());}} 

var myLineChart = new Chart(ctx).Line(data, options); 
+0

對不起,但似乎沒有做任何事情:jsfiddle.net/ds53js5u/8 – 2015-04-05 15:25:53

0

的問題是,您所呼叫的jQuery對象的本地HTTPCanvasElement方法,這當然會失敗。你需要解決2個問題。

  1. 追加畫布到身體以便使用它。例如,通過使用appendTo方法。

  2. 使用HTMLElement作爲canvas變量而不是jQuery收集實例。您可以從jQuery集合中獲取HTMLElement對象作爲此集合的第一個元素([0])。

固定碼是:

var canvas = $('<canvas/>', {id: "myChart", width: 400, height: 400}).appendTo('body')[0] 
var ctx = canvas.getContext("2d"); 

演示:https://jsfiddle.net/ds53js5u/5/

0

一個黑客攻擊的有點繞,保證畫布是從來沒有吸引到元素,但顯示在彈出 - 但它的工作原理,並與JavaScript生成,而不是jQuery。

https://jsfiddle.net/btzqqq9v/

HTML

<div id="canvasContainer" style="position:absolute; visibility:hidden"></div> 

JAVASCRIPT

var s = '<canvas id="myChart" width="400" height="400"></canvas>'; 
var div = document.getElementById('canvasContainer'); 
div.innerHTML = s; 
var canvas = div.firstChild; 
var ctx = canvas.getContext("2d");