Canvas 和 SVG 之间的犹豫不决
Indecision between Canvas and SVG
我的一个朋友需要一个呈现 32x32 黑色矩形集的小应用程序。单击其中一个时,它需要切换到白色矩形。然后,通过更改这些框的颜色创建的图像需要导出为 png 或 jpg。
我很确定我可以使用 Canvas 来做到这一点,但现在我的网格在工作,我突然意识到我完全不知道如何实际让交互工作,或者是否有可能让它工作。
我可以使用 SVG 来完成此任务吗?我知道 Canvas 有一个导出画布上显示的内容的功能,但如果没有交互,它就毫无用处。
我的最佳选择是什么?真的能做到吗?
这显示了如何使用画布管理简单的交互:制作一个 32 x 32 的数组,显示矩形是否已打开。当用户单击画布时,计算鼠标所在的矩形并切换它。
对于更复杂的交互,您需要存储绘制的每个形状的坐标,然后重绘整个画布,以确保正确处理重叠的形状。
JSfiddle
var canvas = document.getElementById('rectangles'),
context = canvas.getContext('2d'),
rectangles = [],
rectWidth = canvas.width / 32,
rectHeight = canvas.height / 32;
function makeRectangles() {
var x, y, row;
for (y = 0; y < 32; y++) {
row = [];
for (x = 0; x < 32; x++) {
row.push(true);
drawRectangle(x, y, true);
}
rectangles.push(row);
}
}
function drawRectangle(x, y, black) {
context.strokeStyle = 'cyan';
context.fillStyle = black ? 'black' : 'white';
context.beginPath();
context.rect(x * rectWidth, y * rectHeight, rectWidth, rectHeight);
context.fill();
context.stroke();
}
function canvasClick(ev) {
var x = Math.floor((ev.pageX - canvas.offsetLeft) / rectWidth),
y = Math.floor((ev.pageY - canvas.offsetTop) / rectHeight);
rectangles[y][x] = !rectangles[y][x];
drawRectangle(x, y, rectangles[y][x]);
}
makeRectangles();
canvas.addEventListener('click', canvasClick);
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- 如何在aspx页面之间传递参数
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么是&&在没有if的行中的变量之间
- DOM元素和angular元素之间的主要区别是什么
- Canvas 和 SVG 之间的犹豫不决