在最新的 JqPlot 示例中(请参阅此处,在一些图表下方有可以单击的按钮,并且 div 会随着图表作为图像向下滑动,允许您右键单击并另存为。
我已经检查了源代码,但我只是看不到发生这种情况的地方。我已经看到了有关此的各种讨论(请参阅此处,但是我的 javascript 充其量是基本的。但是,这是我想在我当前的项目中实现的东西。
是否有人知道有关如何执行此操作的完整教程,即从实际的 jquery 代码一直到 html 代码中的实现。
这是我可以编写的最简单的示例:
//after creating your plot do
var imgData = $('#chart1').jqplotToImageStr({}); // given the div id of your plot, get the img data
var imgElem = $('<img/>').attr('src',imgData); // create an img and add the data to it
$('#imgChart1').append(imgElem); // append the img to the DOM
在这里拉小提琴。
标记感谢您的贡献,有时您可能已经混入(包括)光标和缩放功能,您可能需要创建图表的一部分的图像,希望恢复缩放以创建其他图像部分。这可能并不容易,因为 jqPlot 不会为您将图形还原为原始图,因此您必须自己手动完成。
我的补救措施
丰富您的 $.jqplot 选项
cursor: {
show: true,
zoom: true,
looseZoom: true,
showTooltip: false,
dblClickReset:true,
}
这使用户能够恢复到图形的初始外观。如果您选择这种方法,请记住通过建议说明向您的用户提供有关如何恢复的建议,例如
Double click on the Graph to Reset Zoom back to 100%
出于可用性目的。
对于那些更倾向于编码的人这里是一个补救措施,它包括马克介绍的一些代码(再次感谢)
在图的正下方创建一个按钮,为其提供一个 id 属性并将一个偶数处理程序附加到它的点击函数,
<button id="show_revert_graph_btn" class="jqplot-replot-button" title="Reset Zoom back to 100%">Revert the Graph</button>
附加一个事件监听器并实现/注册一个像这样的处理程序
$('#show_revert_graph_btn').click(function(){
// simulating a double click on the canvas
// not that the selecting expression includes
// the div id of where i chose to plot the chart "chart104" and the default class
// provided to the canvas holding my chart i.e "canvas.jqplot-event-canvas"
// then i double click it
$('#chart104 canvas.jqplot-event-canvas').dblclick();
});
缩放后的图像创建 在我的应用程序中,我需要从图表的不同部分创建多个图像,因此缩放允许我放大这部分,画布到图像功能允许我保存在画布中显示的当前数据我放大了一点。挑战是,如何重新加载我的新缩放点作为复制 补救措施的新图像
$('#show_plotted_image_btn').toggle(
function(){
console.log('showing graph');
// get the image
function genImg(){
var imgData = $('#chart104').jqplotToImageStr({});
// given the div id of your plot, get the img data
var imgElem = $('<img/>').attr('src',imgData); // create an img and add the data to it
$('#plotted_image_div').empty(); // remove the old graph
$('#plotted_image_div').append(imgElem);
};
genImg();
// show the image
$('#plotted_image_div').css('display','block');
},
function(){
// hide the image
console.log('hiding graph');
$('#plotted_image_div').css('display','none');
}
);
*在我的实现中,我只想显示最新图像,因此每次我要求新图像时,我都会通过 $('#plotted_image_div').empty(); 摆脱旧图像,这只是清空旧图像然后附加新的。*
*这是我的 HTML,供可能需要进一步说明的人使用 *
<div id="chart104" class=""></div>
<button id="show_plotted_image_btn" class="jqplot-image-button">View Plot Image</button>
<span style="font-weight: bold; color:#FC2896;"> Double click on the Graph to Reset Zoom back to 100%</span>
<button id="show_revert_graph_btn" class="jqplot-replot-button" title="Reset Zoom back to 100%">Revert the Graph</button>
<div id="plotted_image_div" class="" style="display: none;"></div>
祝你好运
看起来他们正在使用 Canvas 的一个功能来渲染图像:
https://bitbucket.org/cleonello/jqplot/src/0d4d1a4fe522/src/jqplot.toImage.js
当您遇到图像输出问题时,您必须更改jquery.jqplot.js
. 在某些浏览器上,脚本会停止无限循环(Chrome 和 Firefox)。
更改此代码:
for (var i=0; i<wl; i++) {
w += words[i];
if (context.measureText(w).width > tagwidth) {
breaks.push(i);
w = '';
i--;
}
}
对此:
for (var i=0; i<wl; i++) {
w += words[i];
if (context.measureText(w).width > tagwidth && w.length > words[i].length) {
breaks.push(i);
w = '';
i--;
}
}
将此添加到您的 html 中:
<div id="chart"></div>
<div id="imgChart"></div>
这在你的 jqplot 代码之后给 jquery:
$(document).ready(function(){
//after creating your plot do
var imgData = $('#chart').jqplotToImageStr({}); // given the div id of your plot, get the img data
var imgElem = $('<img/>').attr('src',imgData); // create an img and add the data to it
$('#imgChart').append(imgElem); //
});
在此处查看演示
这个解决方案对我很有效。简单快捷。
//after creating your plot do
var imgData = $('#chart1').jqplotToImageStr({}); // given the div id of your plot, get the img data
var imgElem = $('<img/>').attr('src',imgData); // create an img and add the data to it
$('#imgChart1').append(imgElem); //
我正在使用 primefaces 3.2,因此无法使用 primefaces 中提供的新功能