我最近在具有Raphael画布的移动浏览器中进行了测试,我们可以在其中使用平板电脑绘制线条等。
例如,使用 svg 在浏览器上绘制时速度和精度不足,即使在移动过程中触摸没有停止,在绘制时线条也会中断等。
所以我正在研究绘图应用程序中使用的东西,这些应用程序非常适合触摸屏。
如果我们想在移动浏览器上有一个绘图应用程序,它是最好的 canvas 或 svg 还是两者都不是,因为我们不想在绘图时断线?
在哪里我可以开始研究更多关于 android 用于绘图的绘图 api,这些绘图被“笔备忘录、S2 和其他触摸应用程序”使用。
更新:检查这个jsfiddle
var canvas = $("#canvas");
paper = Raphael("canvas");
var clicking = false;
var line;
var pathArray = [];
canvas.bind("mousedown", _mousedownHandler);
canvas.bind("touchstart", _mousedownHandler);
function _mousedownHandler(event){
clicking = true;
// _drawArrowLineBegin(e);
if(event.type == "touchstart"){
event.preventDefault();
event = event.originalEvent.touches[0] || event.originalEvent.changedTouches[0];
}
_drawFreeLineBegin(event);
};
function _mousemoveHandler(event){
// _drawArrowLineMove(event);
if(event.type == "touchmove"){
event.preventDefault();
event = event.originalEvent.touches[0] || event.originalEvent.changedTouches[0];
}
_drawFreeLineMove(event);
};
function _mouseupHandler(event){
clicking = false;
};
function _enableEvents(){
canvas.bind("mousemove.mmu", _mousemoveHandler);
canvas.one("mouseup.mmu", _mouseupHandler);
canvas.bind("touchmove.mmu", _mousemoveHandler);
canvas.one("touchend.mmu", _mouseupHandler);
};
function _drawArrowLineBegin(e) {
clicking = true;
line = paper.path("M" + (e.offsetX || e.clientX) + " " + (e.offsetY || e.clientY) + "L" + (e.offsetX || e.clientX) + " " + (e.offsetY || e.clientY)).attr({stroke:'#FF0000', 'stroke-width': 2, 'arrow-end': 'classic-wide-long'});
pathArray = line.attr("path");
_enableEvents();
}
function _drawArrowLineMove(e){
if(clicking == false) return;
if (pathArray[1][1] != undefined) { // not IE 8
pathArray[1][1] = e.offsetX || e.clientX;
pathArray[1][2] = e.offsetY || e.clientY;
} else {
pathArray = pathArray.replace(/L\d+ \d+$/, "L" + e.offsetX + " " + e.offsetY);
}
line.attr({path: pathArray});
}
function _drawFreeLineBegin(e) {
clicking = true;
line = paper.path("M"
+ (e.pageX) + ","
+ (e.pageY)).attr({stroke:'#FF0000', 'stroke-width': 2});
pathArray = line.attr("path");
_enableEvents();
}
function _drawFreeLineMove(e){
if(clicking == false) return;
line.attr("path",line.attr("path")
+ "L"
+ (e.pageX)
+ ","
+ (event.pageY));
}