Javascript 如何使用paper.js实现多点触摸交互?

Javascript 如何使用paper.js实现多点触摸交互?,javascript,touch,paperjs,Javascript,Touch,Paperjs,因此paper.js是一个很棒的库。我目前正试图利用它来构建一个多点触摸白板/绘图webapp,它最终将通过服务器进行协作 但是,我如何使用纸张实现多点触摸 我的路障就在这里。我一直无法找到允许paper.js为每次触摸创建多个路径的方法 到目前为止,我已经通过谷歌做了很多研究,虽然我的研究可能有缺陷,但我尝试将浏览器touchevents与paper.js结合使用,并尝试通过创建一个新的画布将它们分开来处理每个事件 如果这里有人成功地使用paper.js实现了multi-touch,或者有比p

因此paper.js是一个很棒的库。我目前正试图利用它来构建一个多点触摸白板/绘图webapp,它最终将通过服务器进行协作

但是,我如何使用纸张实现多点触摸

我的路障就在这里。我一直无法找到允许paper.js为每次触摸创建多个路径的方法

到目前为止,我已经通过谷歌做了很多研究,虽然我的研究可能有缺陷,但我尝试将浏览器touchevents与paper.js结合使用,并尝试通过创建一个新的画布将它们分开来处理每个事件


如果这里有人成功地使用paper.js实现了multi-touch,或者有比paper更好的应用推荐,我会非常高兴地听到。

我已经使用hammer.js library和paperJS实现了这一点

我为每个可能的手指创建一条路径。 当触发触摸事件时,我枚举所有触摸,并为每个对应路径添加点。然而,我在Javascript中使用paperJS,而不是在Paperscript的标记中使用,而且我在浏览器中使用Hammer.js的touch emulator进行测试

我可以举一个HammerJS的例子:

看这里

导入javascript文件

    <script src="js/libs/jquery/jquery.js"></script>

    <script src="js/libs/hammer.js/touch-emulator.js"></script>
    <script> TouchEmulator(); </script>

    <script src="js/libs/hammer.js/hammer.js"></script>
    <script src="js/libs/hammer.js/jquery.hammer.js"></script>
    <script src="js/libs/paper/paper-full.js"></script>
    <canvas id="myCanvas" width="1500" height="1500" style="background-color: #000;">
//Listen multitouch event for simultation
document.body.addEventListener('touchstart', touchStart, false);
document.body.addEventListener('touchmove', touchmove, false);
document.body.addEventListener('touchend', touchEnd, false);
监听触摸仿真器的事件

为每个手指触摸跟踪每个路径

var touch = false;
function touchStart()
{
    touch = true;
}

function touchEnd()
{
    touch = false;

    //Finish all paths
    myPaths = [];
    for (var i = 0; i < 12; i++)
    {
      myPath = new paper.Path();
      myPath.strokeColor = '#00ff00';
      myPath.strokeWidth = 2;
      myPaths.push(myPath);
    }

}

function touchmove(ev) {

    if (!touch)
        return;

    //Draw path for each touch
    for (var i = 0; i < ev.changedTouches.length; i++)
    {
        var x1, y1;
        x1 = ev.changedTouches[i].pageX;
        y1 = ev.changedTouches[i].pageY;

        myPaths[i].add(new Point(x1, y1));
        paper.view.draw();
    }

    console.log(ev);
}
var-touch=false;
函数touchStart()
{
触摸=真实;
}
函数touchEnd()
{
触摸=假;
//完成所有路径
mypath=[];
对于(变量i=0;i<12;i++)
{
myPath=新纸张。路径();
myPath.strokeColor='#00ff00';
myPath.strokeWidth=2;
myPath.push(myPath);
}
}
功能触摸移动(ev){
如果(!触摸)
返回;
//为每次触摸绘制路径
对于(变量i=0;i
最后,添加每个触摸对应的每个路径的点

警告: 如上所述,此示例使用触摸仿真器。touch emulator的事件对象“ev”与hammer.js的事件对象略有不同。

对于hammer.js,类似于:

$('#myCanvas').hammer().on("drag", function(ev) {

    for (var i = 0; i < ev.gesture.touches.length; i++)
    {
        var x1, y1;
        x1 = ev.gesture.touches[i].pageX;
        y1 = ev.gesture.touches[i].pageY;

        myPaths[i].add(new Point(x1, y1));
        paper.view.draw();

    }


});
$('#myCanvas').hammer().on(“拖动”,函数(ev){
对于(变量i=0;i

我正在尽我最大的努力来写一篇正确的英语,我希望它是可以理解的。

我已经使用hammer.js库和paperJS完成了这项工作

我为每个可能的手指创建一条路径。 当触发触摸事件时,我枚举所有触摸,并为每个对应路径添加点。然而,我在Javascript中使用paperJS,而不是在Paperscript的标记中使用,而且我在浏览器中使用Hammer.js的touch emulator进行测试

我可以举一个HammerJS的例子:

看这里

导入javascript文件

    <script src="js/libs/jquery/jquery.js"></script>

    <script src="js/libs/hammer.js/touch-emulator.js"></script>
    <script> TouchEmulator(); </script>

    <script src="js/libs/hammer.js/hammer.js"></script>
    <script src="js/libs/hammer.js/jquery.hammer.js"></script>
    <script src="js/libs/paper/paper-full.js"></script>
    <canvas id="myCanvas" width="1500" height="1500" style="background-color: #000;">
//Listen multitouch event for simultation
document.body.addEventListener('touchstart', touchStart, false);
document.body.addEventListener('touchmove', touchmove, false);
document.body.addEventListener('touchend', touchEnd, false);
监听触摸仿真器的事件

为每个手指触摸跟踪每个路径

var touch = false;
function touchStart()
{
    touch = true;
}

function touchEnd()
{
    touch = false;

    //Finish all paths
    myPaths = [];
    for (var i = 0; i < 12; i++)
    {
      myPath = new paper.Path();
      myPath.strokeColor = '#00ff00';
      myPath.strokeWidth = 2;
      myPaths.push(myPath);
    }

}

function touchmove(ev) {

    if (!touch)
        return;

    //Draw path for each touch
    for (var i = 0; i < ev.changedTouches.length; i++)
    {
        var x1, y1;
        x1 = ev.changedTouches[i].pageX;
        y1 = ev.changedTouches[i].pageY;

        myPaths[i].add(new Point(x1, y1));
        paper.view.draw();
    }

    console.log(ev);
}
var-touch=false;
函数touchStart()
{
触摸=真实;
}
函数touchEnd()
{
触摸=假;
//完成所有路径
mypath=[];
对于(变量i=0;i<12;i++)
{
myPath=新纸张。路径();
myPath.strokeColor='#00ff00';
myPath.strokeWidth=2;
myPath.push(myPath);
}
}
功能触摸移动(ev){
如果(!触摸)
返回;
//为每次触摸绘制路径
对于(变量i=0;i
最后,添加每个触摸对应的每个路径的点

警告: 如上所述,此示例使用触摸仿真器。touch emulator的事件对象“ev”与hammer.js的事件对象略有不同。

对于hammer.js,类似于:

$('#myCanvas').hammer().on("drag", function(ev) {

    for (var i = 0; i < ev.gesture.touches.length; i++)
    {
        var x1, y1;
        x1 = ev.gesture.touches[i].pageX;
        y1 = ev.gesture.touches[i].pageY;

        myPaths[i].add(new Point(x1, y1));
        paper.view.draw();

    }


});
$('#myCanvas').hammer().on(“拖动”,函数(ev){
对于(变量i=0;i

我尽我所能写一篇正确的英语,我希望它是可以理解的。

谢谢。这正是我要找的!非常感谢。这正是我要找的!