【发布时间】:2016-04-23 11:01:09
【问题描述】:
我正在使用svg.js 的折线数组方法从通过将光标的 x,y 坐标存储在页面上记录的值绘制线条。
这个想法是首先让用户浏览页面并移动光标,然后将值输入数组,然后当单击按钮时,svg.js 将根据光标的移动绘制线条。
被this 遵循的语法:
var polyline = draw.polyline([[0,0], [100,50], [50,100]]).fill('none').stroke({ width: 1 })
如果我手动复制粘贴数组中的值,如下所示:
var polyline = draw.polyline([[475,76], [475,76], [489,75], (...)]]).fill('none').stroke({ width: 1 });
svg.js 按预期工作。
如果我传入一个变量,它会告诉我:
svg.js:2632 Error: <polyline> attribute points: Expected number, "NaN,528 NaN,531 …".
这是我的代码:
// movement
var array_cursor_movement = [];
$(document).mousemove(function(e) {
var cursor_movement = "["+ e.pageX +","+ e.pageY +"]";
array_cursor_movement.push(cursor_movement);
var cursor_movement = array_cursor_movement.join(', ');
console.log("movement:" + cursor_movement);
localStorage.setItem("cursor_movement_pos", JSON.stringify(array_cursor_movement));
});
// click for preview lines
$(".preview--lines, .close--button").click(function(){
$(".preview").toggleClass("show--hide");
// draw lines
var retrievedData = localStorage.getItem("cursor_movement_pos");
var array_cursor_movement_b = JSON.parse(retrievedData);
var cursor_movement = array_cursor_movement_b.join(', ');
cursor_movement = "["+cursor_movement+"]";
console.log("preview:" + cursor_movement);
var width = window.innerWidth;
var height = window.innerHeight;
var draw = SVG('drawing').size(width, height);
var polyline = draw.polyline(cursor_movement).fill('none').stroke({ width: 1 });
})
有人有经验吗?
谢谢, 安德烈
【问题讨论】:
-
您不会将数组传递给 polyine。你之前把它变成了一个字符串。
var cursor_movement = array_cursor_movement_b.join(', '); cursor_movement = "["+cursor_movement+"]"; -
确保您的字符串采用所需的格式
x,y x,y x,y。逗号周围没有空格,但您的代码似乎在逗号之后插入了空格,例如 x, y by.join(', ') -
@Redu 没有必要。他只需要推动数组而不是加入的字符串。 Op 已经提到正确的语法是什么。他只需要这样做
-
@Fuzzyma 感谢您的及时回复!我有点困惑:这个
var cursor_movement = array_cursor_movement_b.join(', ');已经把数组变成了字符串;而这个cursor_movement = "["+cursor_movement+"]"将字符串[x,y], [x,y]包装成[]。或者这是错的? js新手在这里。 -
不要那样做!只传递数组而不是字符串!!!
标签: javascript arrays svg.js