4

マウスイベントを使用して画像にペイントするこの子供用ペイントアプリがあります。ただし、iPadで動作するように、マウスイベントをタッチに変換する必要があります。誰かがこれを行う方法を説明してください。私のアプリ コードは、このサンプル コードhttp://cool-php-tutorials.blogspot.co.uk/2011/05/simple-html5-drawing-app-with-saving.htmlとよく似ています。

PS 私の javascript に関する知識は高度なレベルではないので、実際のコードや例を見せていただければ大変助かります。

マウスイベントを行う私のコードは次のとおりです。この機能をマウスからタッチに変換してください..お願いします.2日以来、これで立ち往生しています..:|

var clickX = new Array();
var clickY = new Array();
var clickDrag = new Array();

// binding events to the canvas
$('#drawingCanvas').mousedown(function(e){
  var mouseX = e.pageX - this.offsetLeft;
  var mouseY = e.pageY - this.offsetTop;

  paint = true; // start painting
  addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);

  // always call redraw
  redraw();
});

$('#drawingCanvas').mousemove(function(e){
  if(paint){
    addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
    redraw();
  }
});

// when mouse is released, stop painting, clear the arrays with dots
$('#drawingCanvas').mouseup(function(e){
  paint = false;

  clickX = new Array();
  clickY = new Array();
  clickDrag = new Array();
});

// stop painting when dragged out of the canvas
$('#drawARobot').mouseleave(function(e){
  paint = false;
});


// The function pushes to the three dot arrays
function addClick(x, y, dragging)
{
  clickX.push(x);
  clickY.push(y);
  clickDrag.push(dragging);
}



// this is where actual drawing happens
// we add dots to the canvas


function redraw(){

  for(var i=0; i < clickX.length; i++)
  {  
    context.beginPath();
    if(clickDrag[i] && i){
      context.moveTo(clickX[i-1], clickY[i-1]);
     }else{
       context.moveTo(clickX[i]-1, clickY[i]);
     }
     context.lineTo(clickX[i], clickY[i]);
     context.closePath();
     context.stroke();
  }
}
4

4 に答える 4

9

次のようにマッピングできます。

$('#drawingCanvas').bind("mousedown touchstart", function(e){

$('#drawingCanvas').bind("mousemove touchmove", function(e){

$('#drawingCanvas').bind("mouseup touchend", function(e){

そして、必要に応じてコードを微調整します。

于 2013-07-12T11:18:25.197 に答える
2

これを試してください:

注: jquery ライブラリが必要です。

touchmouse.js

(function() {

    /* == GLOBAL DECLERATIONS == */
    TouchMouseEvent = {
        DOWN: "touchmousedown",
        UP: "touchmouseup",
        MOVE: "touchmousemove"
    }

    /* == EVENT LISTENERS == */
    var onMouseEvent = function(event) {
        var type;

        switch (event.type) {
            case "mousedown": type = TouchMouseEvent.DOWN; break;
            case "mouseup":   type = TouchMouseEvent.UP;   break;
            case "mousemove": type = TouchMouseEvent.MOVE; break;
            default: 
                return;
        }

        var touchMouseEvent = normalizeEvent(type, event, event.pageX, event.pageY);      
        $(event.target).trigger(touchMouseEvent); 
    }

    var onTouchEvent = function(event) {
        var type;

        switch (event.type) {
            case "touchstart": type = TouchMouseEvent.DOWN; break;
            case "touchend":   type = TouchMouseEvent.UP;   break;
            case "touchmove":  type = TouchMouseEvent.MOVE; break;
            default: 
                return;
        }

        var touch = event.originalEvent.touches[0];
        var touchMouseEvent;

        if (type == TouchMouseEvent.UP) 
            touchMouseEvent = normalizeEvent(type, event, null, null);
        else 
            touchMouseEvent = normalizeEvent(type, event, touch.pageX, touch.pageY);

        $(event.target).trigger(touchMouseEvent); 
    }

    /* == NORMALIZE == */
    var normalizeEvent = function(type, original, x, y) {
        return $.Event(type, {
            pageX: x,
            pageY: y,
            originalEvent: original
        });
    }

    /* == LISTEN TO ORIGINAL EVENT == */
    var jQueryDocument = $(document);

    if ("ontouchstart" in window) {
        jQueryDocument.on("touchstart", onTouchEvent);
        jQueryDocument.on("touchmove", onTouchEvent);
        jQueryDocument.on("touchend", onTouchEvent); 
    } else {
        jQueryDocument.on("mousedown", onMouseEvent);
        jQueryDocument.on("mouseup", onMouseEvent);
        jQueryDocument.on("mousemove", onMouseEvent);
    }

})();

html ページ (index.html)

<!DOCTYPE html>
<html>
    <head>
        <title>touch</title>

        <meta http-equiv="Content-Type" content="text/html;charset=utf8" />
        <meta name="author" content="AUTHOR" />
        <meta name="keyword" content="KEYWORD" />
        <meta name="description" content="DESCRIPTION" />
        <script type="text/javascript" src="jquery.min.js"></script><!-- Please Download the jquery library -->
        <script type="text/javascript" src="touchmouse.js"></script>
        <script type="text/javascript">
        $(function(){
                var startdrag= false;
             $("#a").on(TouchMouseEvent.DOWN, function(){
                startdrag= true;
                move();

             });
             function move(){

                 $("#a").on(TouchMouseEvent.MOVE, function(e){
                    if(startdrag){
                    $(this).css('left',(e.pageX-50)) ;
                    $(this).css('top',(e.pageY-50));
                 }
                 });

            }
             $("#a").on(TouchMouseEvent.UP, function(e){
                startdrag= false;

             });

        });
        </script>

    </head>
    <body>
        <div id ="a" style="display:block;position:absolute;width:100px;height:100px;background:red;" ></div>
    </body>
</html>

これは、Androidフォンで機能しています。

于 2013-07-12T11:29:52.080 に答える
1

マウス イベントとタッチ イベントの問題は、同じ API を持たないことです。

そのため、マウスとタッチの両方の入力ができるように API を正規化する必要があります。

次のような解決策がいくつかあります。

また、ハンマー コードは非常に使いやすいです。

var hamme = $("#myCanvas").hammer();

hammer.on("touch", function(e){     
   e.gesture.center.pageX;
    // ..
});

hammer.on("drag", function(e){
    e.gesture.center.pageX
   //..
})
于 2013-07-12T11:19:49.227 に答える
0

あなたも試すことができます -jQuery UI Touch Punch

ここをクリック

于 2013-07-12T11:32:42.660 に答える