我在这里回答了一个类似的问题:
https://stackoverflow.com/a/12717983/1560583
我希望这会有所帮助,我已经在下面重新发布了答案:
以下是我使用 Zerb Foundation 3 响应式 Web 框架、Javascript、jQuery 和 Processing.js 解决此问题的方法。如果您想深入了解源代码,可以查看Living Map Project 。
在 javascript/jquery 中:
// handle page resizing
$(window).resize(function() {
var pjs = Processing.getInstanceById('livingmap');
pjs.resizeSketch(document.getElementById('div_p5canvas').offsetWidth, document.getElementById('div_p5canvas').offsetHeight);
} );
在您的 .pde 处理 js 代码中(注意:使用 zurb 的基础 3、我定义的网格以及如何将其转换为像素,我觉得计算效果很好:
void resizeSketch(int w, int h) {
if (w < 680) {
size(w, floor(float(w)/680*610) - 30);
} else size(680, 610 - 30);
}
在您的 html 中:
<div class="flex-video widescreen" id="div_p5canvas"
<canvas id="livingmap" data-processing-sources="livingmap_2.pde" style="height:auto; width:auto; focus { outline: 0; }" tabindex="1"></canvas>
</div>