zoukankan      html  css  js  c++  java
  • canvas 文字转化为粒子

    var canvas = document.createElement('canvas');
    var cxt = canvas.getContext('2d');
    var W = canvas.width = 500;
    var H = canvas.height = 200;
    var str = 'Grewer,点击此处';
    cxt.textBaseline = 'hanging';
    cxt.font = '60px  宋体'
    var sw = cxt.measureText(str).width;
    if (sw > W) {
        sw = W;
    }
    cxt.fillText(str, (W - sw) / 2, (H - 60) / 2, W);
    
    canvas.style.border = '1px solid #ddd'
    
    document.body.appendChild(canvas);
    
    var imageData = cxt.getImageData(0, 0, W, H);
    
    var getV = function(i,j) {
        var v = Math.random() * 1;
        v = v < 0.1 ? 0.1 : v;
        var slope = (i-W/2) / (j-H/2);
        slope =  slope < 0 ? -slope :slope;
        var x = v*slope;
        var y = v;
        if(i<W/2&&j<H/2){
          x = -x;
          y = -y;
        };
        if(i<W/2&&j>H/2){
          x = -x;
        };
        if(i>W/2&&j<H/2){
          y = -y;
        };
        return{x:x,y:y}
    }
    
    function getDots(imageData) {
        //从imageData对象中取得粒子,并存储到dots数组中
        var dots = [];
        //dots的索引
        var index = 0;
        for (var i = 0; i < W; i++) {
            for (var j = 0; j < H; j++) {
                //data值中的红色值
                var k = 4 * (i + j * W);
                //data值中的透明度
                if (imageData.data[k + 3] > 0) {
                  var v = getV(i,j);
                    dots[index++] = {
                        'index': index,
                        'x': i,
                        'y': j,
                        'red': k,
                        'vX': v.x,
                        'vY': v.y,
                    }
    
                }
            }
        }
    
        var newDots = [];
        var len = dots.length;
        for (var i = 0; i < len; i++) {
            newDots.push(dots.splice(Math.floor(Math.random() * dots.length), 1)[0]);
        }//打乱顺序
        
        return newDots;
    
    }
    
    var dataArr = getDots(imageData)
    
    
    var random = function() {
        cxt.clearRect(0, 0, W, H);
    
        for (var i = 0; i < dataArr.length; i++) {
            var temp = dataArr[i];
            temp.x += temp.vX;
            temp.y += temp.vY
            cxt.fillRect(temp.x, temp.y, 1, 1);
        }
    
        window.requestAnimationFrame(random);
    }
    document.onclick = function(e) {
        e = e || event;
        var x = e.clientX - canvas.getBoundingClientRect().left;
        var y = e.clientY - canvas.getBoundingClientRect().top;
    
        if ((0 <= x) && (x <= 500) && (0 <= y) && (y <= 200)) {
            random();
        }
    }

     参考文章:http://www.cnblogs.com/xiaohuochai/p/7452898.html

     网页查看: https://grewer.github.io/JsDemo/canvasParticle/

     
  • 相关阅读:
    Python格式化输出%s和%d
    操作数据库
    协议类介绍
    并发和并行和压测 、对带宽的理解解释
    悠悠大神的 并发当前目录下所有文件的方法(还没试过)
    post参数的方法 json data 和特别的传参
    接口测试简介
    appium的三种等待方式 (还没实践过,记录在此)
    人生进步目标
    保持一个会话 添加 HTTP Cookie管理器
  • 原文地址:https://www.cnblogs.com/Grewer/p/7635060.html
Copyright © 2011-2022 走看看