【发布时间】:2013-07-19 23:52:24
【问题描述】:
我最近在具有 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));
}
【问题讨论】:
-
在我看来更像是一个实现问题。两者都适合您提到的内容。你有什么方法可以为你的应用程序部分创建一个小提琴?
-
@ShamasisBhattacharya 刚刚用 jsfiddle 更新
-
实现需要做一些改进。我会花一些时间来制作一个小提琴。
标签: android canvas svg raphael