0

我正在尝试使用http://ejohn.org/blog/processingjs/处的 javascript 处理端口我想使用以下构造函数。Processing(CanvasElement, "some massive block of code");我知道 javascript 本身并不支持多行字符串,但是有没有办法传递类似下面的内容而不必连接每一行并转义每个特殊字符?

/**
 * Array. 
 * 
 * An array is a list of data. Each piece of data in an array 
 * is identified by an index number representing its position in 
 * the array. Arrays are zero based, which means that the first 
 * element in the array is [0], the second element is [1], and so on. 
 * In this example, an array named "coswav" is created and
 * filled with the cosine values. This data is displayed three 
 * separate ways on the screen.  
 */

size(200, 200);

float[] coswave = new float[width];

for (int i = 0; i < width; i++) {
  float amount = map(i, 0, width, 0, PI);
  coswave[i] = abs(cos(amount));
}

for (int i = 0; i < width; i++) {
  stroke(coswave[i]*255);
  line(i, 0, i, height/3);
}

for (int i = 0; i < width; i++) {
  stroke(coswave[i]*255 / 4);
  line(i, height/3, i, height/3*2);
}

for (int i = 0; i < width; i++) {
  stroke(255 - coswave[i]*255);
  line(i, height/3*2, i, height);
}
4

5 回答 5

3

Javascript 实际上确实支持多行字符串:在每行的末尾附加一个反斜杠:

alert('1\
    2\
    3');

不是很漂亮,但它有效。

另一种方法是使用脚本对文本进行编码...我建议使用 PHP,因为它是 1-liner:

<?=json_encode('your text');?>
于 2009-01-20T12:04:42.730 回答
1

对于更易于维护的解决方案,我会将其放在页面正文中的脚本标签中,例如:

<script type="text/processing" id="code">
/**
 * Array. 
 * ...
 */

size(200, 200);
...
</script>

并构造您的处理对象,例如:

var canvas = document.getElementById('canvas');
var code = document.getElementById('code');
Processing(canvas , code.textContent);

对于一个快速而肮脏的解决方案,按照RoBorg 的建议,通过 JSON 编码器运行您的处理代码,您将获得一个字符串,您可以将其复制并粘贴到第二个参数中。

于 2009-01-20T12:48:33.920 回答
0

将“大量代码块”放在服务器上自己的文件中,使用 AJAX 获取并确保它具有合理的缓存标头。

于 2009-01-20T12:02:59.627 回答
0

或者,您可以将文本放入 HTML 页面(例如,隐藏)并从那里获取...

于 2009-01-20T12:09:57.600 回答
0

另一种选择是使用 E4X 文字

var s = "" + <r><![CDATA[
line 1
line 2
]]></r>;

虽然我怀疑 IE6 是否支持它。

于 2009-01-20T12:11:53.323 回答