2017-06-07 12 views
0

CanvasとEaselJSで描画できるHTMLページを作成しました。ウェブアプリケーションでキャンバスに描画できます。また、React-native Webviewにこのページを埋め込みたいと思います。React-Native、レンダリングH5キャンバスとWebviewのEaselJSシェイプ

iOSでは、Webviewは正常に埋め込まれていますが、指で触れることはできません。私は理由を見つけられず、それを解決する方法を見つけることができません。 Webブラウザで

:iOSアプリで

See html in browser(picture)

、それはWebViewの中でレンダリングすることができますが、タッチで描くためにペンを使用することはできません。

下記のHTMLコード(私は聞いてタッチイベントを追加した):、それがステージにシェイプを作成するために大丈夫だ

render() { 
       return (
       <View style={styles.container}> 
        <WebView source={ 
       Platform.OS === 'ios' ?  require('../../server/public/index.html') : {uri: 'file:///android_asset/index.html'}} 
        javaScriptEnabled={true} 
        ref={c => { this.webview = c; }} 
        onLoad={this.injectJavaScript} 
        startInLoadingState={true} 
        mediaPlaybackRequiresUserAction={true} 
        scrollEnabled={ this.props.scrollEnabled || false } /> 
       </View> 
      ) 
      } 

描くことはできません。

<!DOCTYPE html> 
<html> 

<head> 
    <title></title> 

    <script type="text/javascript" src="easeljs/utils/UID.js"></script> 
    <script type="text/javascript" src="easeljs/events/EventDispatcher.js"></script> 
    <script type="text/javascript" src="easeljs/events/MouseEvent.js"></script> 
    <script type="text/javascript" src="easeljs/geom/Matrix2D.js"></script> 
    <script type="text/javascript" src="easeljs/geom/Rectangle.js"></script> 
    <script type="text/javascript" src="easeljs/filters/Filter.js"></script> 
    <script type="text/javascript" src="easeljs/filters/BoxBlurFilter.js"></script> 
    <script type="text/javascript" src="easeljs/display/DisplayObject.js"></script> 
    <script type="text/javascript" src="easeljs/display/Container.js"></script> 
    <script type="text/javascript" src="easeljs/display/Text.js"></script> 
    <script type="text/javascript" src="easeljs/display/Graphics.js"></script> 
    <script type="text/javascript" src="easeljs/display/Shape.js"></script> 
    <script type="text/javascript" src="easeljs/display/Stage.js"></script> 
    <script src="https://code.jquery.com/jquery-3.2.1.slim.js" integrity="sha256-tA8y0XqiwnpwmOIl3SGAcFl2RvxHjA8qp0+1uCGmRmg=" crossorigin="anonymous"></script> 

    <script type="text/javascript"> 
     var canvas, stage, ctx; 
     var tooltype = ''; 

     //Use draw|erase 
     use_tool = function(tool) { 
      tooltype = tool; //update 
     } 

     function free_hand_draw() { 
      //Variables 
      var canvasx = $(canvas).offset().left; 
      var canvasy = $(canvas).offset().top; 
      var last_mousex = last_mousey = 0; 
      var mousex = mousey = 0; 
      var mousedown = false; 

      //Mousedown 
      start = function(e) { 
       last_mousex = mousex = parseInt(e.clientX - canvasx); 
       last_mousey = mousey = parseInt(e.clientY - canvasy); 
       mousedown = true; 
      }; 
      $(canvas).on('mousedown', start); 
      $(canvas).on('touchstart', start); 

      //Mouseup 
      end = function(e) { 
       mousedown = false; 
      }; 
      $(canvas).on('mouseup', end); 
      $(canvas).on('touchend', end); 

      //Mousemove 
      move = function(e) { 
       mousex = parseInt(e.clientX - canvasx); 
       mousey = parseInt(e.clientY - canvasy); 
       if (mousedown) { 
        var shape = new createjs.Shape(); 
        if (tooltype == 'draw') { 
         shape.graphics.beginStroke("black").setStrokeStyle(2, 'round').moveTo(last_mousex, last_mousey).lineTo(mousex, mousey); 
         stage.addChild(shape); 
         stage.update(); 
        } else if (tooltype == 'erase') { 
         shape.graphics.beginStroke("white").setStrokeStyle(10, 'round').moveTo(last_mousex, last_mousey).lineTo(mousex, mousey); 
         stage.addChild(shape); 
         stage.update(); 
        } 
       } 
       last_mousex = mousex; 
       last_mousey = mousey; 
      }; 
      $(canvas).on('mousemove', move); 
      $(canvas).on('touchmove', move); 
     } 

     function createShape(type, value = '') { 
      var shape = new createjs.Shape(); 
      switch (type) { 
       case 'circle': 
        shape.graphics.beginStroke("black").drawCircle(0, 0, 50); 
        shape.x = 100; 
        shape.y = 100; 
        stage.addChild(shape); 
        break; 
       case 'line': 
        shape.graphics.beginStroke("black").setStrokeStyle(10, 'round').moveTo(30, 30).lineTo(90, 90); 
        shape.x = 20; 
        shape.y = 20; 
        stage.addChild(shape); 
        break; 
       case 'rect': 
        shape.graphics.beginStroke("black").drawRect(0, 0, 50, 50); 
        shape.x = 70; 
        shape.y = 70; 
        stage.addChild(shape); 
        break; 
       case 'text': 
        var text = new createjs.Text(value, "20px Arial", "#ff7700"); 
        text.x = 20; 
        stage.addChild(text); 
        document.getElementById('input_text').value = ''; 
        break; 
       case 'pen': 
        use_tool('draw'); 
        break; 
       case 'erase': 
        use_tool('erase'); 
        break; 
      } 
      stage.update(); 
     } 

     function getText() { 
      return document.getElementById('input_text').value 
     } 

     function init() { 
      if (canvas) { 
       document.removeChild(canvas); 
      } 

      canvas = document.createElement('canvas'); 
      canvas.width = 300; 
      canvas.height = 300; 

      var parent = document.getElementById('canvas'); 
      parent.appendChild(canvas); 

      ctx = canvas.getContext('2d'); 
      stage = new createjs.Stage(canvas); 
      free_hand_draw(); 
     } 
    </script> 
</head> 

<body onload="init();"> 
    <div style="display: block; width: 300px;"> 
     <div id="canvas" style="float: left; padding-right: 20px;"></div> 

     <input type="button" id="circle" value="Add Circle"> 
     <input type="button" value="Add Square" onclick="createShape('rect');"> 
     <input type="button" value="Add Line" onclick="createShape('line');"> 
     <input type="button" id="pen" value="Use Pen"> 
     <input type="button" value="Erase" onclick="createShape('erase');"> 
     <input type="text" id="input_text"> 
     <input type="button" value="Input text" onclick="createShape('text', getText());"> 
    </div> 
</body> 

</html> 

はインクルードは、ネイティブコードスニペットがあるリアクト指でタッチ!

See html in iOS emulator(picture)

同時に、HTMLページはiOSのに成功したレンダリングされた、しかし、HTMLでjsのコードとJS参照リンクの両方のJSをロードすることができませんでした。 React-nativeの8089/505のような があります。

いずれかが役に立ちますか?

ありがとうございました。

答えて

0

タッチイベントを有効にするコードを追加する必要があります。文書の下に参照してください、それは

createjs.Touch.enable(stage); 

さらにに関して有効にするには、以下のコードを追加します http://www.createjs.com/docs/easeljs/classes/Touch.html

関連する問題