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>
    

      

  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/geovindu/p/10773577.html
Copyright © 2011-2022 走看看