zoukankan      html  css  js  c++  java
  • Html5: Drawing with text

    <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta charset="utf-8">
    <title>Drawing with text</title>
    <meta name="keywords" content="geovindu">
    <meta name="description" content="涂聚文">  
    <meta name="author" content="Tim Holman">
    <style type="text/css">
    @import "compass/css3";
    
    html, body {
       100%;
      height: 100%;
      margin: 0px;
      overflow: hidden;
      
        &:hover {
       span {
          display: none; 
        }
      }
    }
    
    canvas {
     cursor: crosshair;
      
    }
    
    span {
        font-family: 'Georgia', cursive;
      font-size: 40px;
     position: fixed; 
      top: 50%;
      left: 50%;
      color: #000;
      margin-top: -40px;
      margin-left: -200px;
    }
    </style>
    </head>
    
    <body>
    <canvas id='canvas'></canvas>
    <span id='info'>Click and drag to draw!<span>
    
    <!-- 
      Drawing with text:
      
      -  Click and drag to draw.
      -  Double click to clear.
    
      Ported from java at http://www.generative-gestaltung.de
    
      by Tim Holman - @twholman
    
    -->
    
    
    
    <script type="text/javascript">
    //A PEN BY Tim Holman
    //https://onaircode.com/awesome-html5-canvas-examples-source-code/
    // Drawing with text. Ported from Generative Design book - http://www.generative-gestaltung.de - Original licence: http://www.apache.org/licenses/LICENSE-2.0
    
    // Application variables
    var position = {x: 0, y: window.innerHeight/2};
    var counter = 0;
    var minFontSize = 3;
    var angleDistortion = 0;
    var letters = "中国人民解放了!中国人站起来了!涂聚文(Geovin Du),明者因事而变,知者随事而制!--《盐铁论》。There was a table set out under a tree in front of the house, and the March Hare and the Hatter were having tea at it: a Dormouse was sitting between them, fast asleep, and the other two were using it as a cushion, resting their elbows on it, and talking over its head. 'Very uncomfortable for the Dormouse,' thought Alice; 'only, as it's asleep, I suppose it doesn't mind.'";
    
    // Drawing variables
    var canvas;
    var context;
    var mouse = {x: 0, y: 0, down: false}
    
    function init() {
      canvas = document.getElementById( 'canvas' );
      context = canvas.getContext( '2d' );
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      
      canvas.addEventListener('mousemove', mouseMove, false);
      canvas.addEventListener('mousedown', mouseDown, false);
      canvas.addEventListener('mouseup',   mouseUp,   false);
      canvas.addEventListener('mouseout',  mouseUp,  false);  
      canvas.addEventListener('dblclick', doubleClick, false);
      
      window.onresize = function(event) {
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
      }
    }
    
    function mouseMove ( event ){
      mouse.x = event.pageX;
      mouse.y = event.pageY;
      draw();
    }
    
    function draw() {
     if ( mouse.down ) {
        var d = distance( position, mouse );
        var fontSize = minFontSize + d/2;
        var letter = letters[counter];
        var stepSize = textWidth( letter, fontSize );
        
        if (d > stepSize) {
          var angle = Math.atan2(mouse.y-position.y, mouse.x-position.x);
          
          context.font = fontSize + "px Georgia";
        
          context.save();
          context.translate( position.x, position.y);
          context.rotate( angle );
          context.fillText(letter,0,0);
          context.restore();
    
          counter++;
          if (counter > letters.length-1) {
            counter = 0;
          }
        
        //console.log (position.x + Math.cos( angle ) * stepSize)
          position.x = position.x + Math.cos(angle) * stepSize;
          position.y = position.y + Math.sin(angle) * stepSize;
    
          }
      }     
    }
    
    function distance( pt, pt2 ){
      
      var xs = 0;
      var ys = 0;
     
      xs = pt2.x - pt.x;
      xs = xs * xs;
     
      ys = pt2.y - pt.y;
      ys = ys * ys;
     
      return Math.sqrt( xs + ys );
    }
    
    function mouseDown( event ){
      mouse.down = true;
      position.x = event.pageX;
      position.y = event.pageY;
      
      document.getElementById('info').style.display = 'none';
    }
    
    function mouseUp( event ){
        mouse.down = false;
    }
    
    function doubleClick( event ) {
      canvas.width = canvas.width; 
    }
    
    function textWidth( string, size ) {
      context.font = size + "px Georgia";
      
      if ( context.fillText ) {
        return context.measureText( string ).width;
      } else if ( context.mozDrawText) {
        return context.mozMeasureText( string );
      }
      
     };
    
    init();
    </script>
    </body>
    
    </html>
    

      

  • 相关阅读:
    判定一个APP是否可以上线?
    即时聊天-环信
    类目延展协议
    一个sql的优化
    多线程编程
    sql小总结
    人生七问
    js之按键总结
    搭建框架日志记录
    jquery函数
  • 原文地址:https://www.cnblogs.com/geovindu/p/10773577.html
Copyright © 2011-2022 走看看