我正在做一个在浏览器中显示一些 CAD 图纸的项目。该网站非常适合桌面浏览器,现在我需要启用移动使用(用于平板电脑)。
我的绘图是通过画布绘图调用(context.lineTo,...)从数据创建的,我通过检测 onMouseDown/onMouseMove/onMouseUp JS 事件和鼠标滚轮事件的缩放来进行拖动。
在移动设备上,这些都不起作用(可能是因为它们不会触发我正在捕捉的事件)。将触摸屏滑动实现为拖动和捏合缩放的简单方法是什么?
谢谢你的帮助!
我正在做一个在浏览器中显示一些 CAD 图纸的项目。该网站非常适合桌面浏览器,现在我需要启用移动使用(用于平板电脑)。
我的绘图是通过画布绘图调用(context.lineTo,...)从数据创建的,我通过检测 onMouseDown/onMouseMove/onMouseUp JS 事件和鼠标滚轮事件的缩放来进行拖动。
在移动设备上,这些都不起作用(可能是因为它们不会触发我正在捕捉的事件)。将触摸屏滑动实现为拖动和捏合缩放的简单方法是什么?
谢谢你的帮助!
您应该查看 KineticJS ( http://kineticjs.com )。它还具有对移动设备的拖放画布支持。
请参阅下面的链接以获取教程:
http://www.html5canvastutorials.com/kineticjs/html5-canvas-mobile-events/
如果你想使用现有的 jQuery 插件,你应该查看 Hammer.js。这是一个非常好的图书馆。但是,如果您更喜欢纯 Javascript 解决方案,您可能想查看这个: https ://github.com/rombdn/img-touch-canvas 我发现它对于使用触摸事件在画布上拖动和缩放图像非常有用。
此外,这是我的解决方案,它非常简单易用,但它是使用纯 Javascript 的唯一可拖动解决方案:
HTML:
<canvas id="canvas"></canvas>
JS:
var can = document.getElementById("canvas");
can.addEventListener("touchstart", ctxTouchStart, false);
can.addEventListener("touchmove", ctxTouchMove, false);
can.addEventListener("touchend", ctxTouchEnd, false);
var oX, oY, dX, dY, iX, iY;
iX = 0; iY = 0;
function ctxTouchStart(e) {
if (!e)
var e = event;
e.preventDefault();
mouseIsDown = 0;
oX = e.targetTouches[0].pageX - canvas.offsetLeft;
oY = e.targetTouches[0].pageY - canvas.offsetTop;
}
function ctxTouchMove(e) {
if (!e)
var e = event;
e.preventDefault();
var canX = e.targetTouches[0].pageX - canvas.offsetLeft;
var canY = e.targetTouches[0].pageY - canvas.offsetTop;
dX = canX - oX;
dY = canY - oY;
/* redraw img on canvas
* where -(iX + dX) is the startX
* and -(iY + dY) is the startY
*/
reDrawImageOnCanvas(can, img, -(iX + dX), -(iY + dY));
}
function ctxTouchEnd(e) {
if (!e)
var e = event;
e.preventDefault();
iX += dX;
iY += dY;
}
通过这样做,您的图像可以顺利地拖过画布。但是我没有弄清楚如何进行缩放部分,所以我在网上搜索并发现https://github.com/rombdn/img-touch-canvas有用并改用这个。希望我的回答有帮助。