用 Canvas 生成彩色三角形随机背景

思路是网上已经流行了一阵的多边风格(Low Poly),这次想用类似的样式做一个背景图,换个博客的背景,考虑三角形见棱见角,尖尖比较多,做背景的话效果不错。JS和Canvas很好玩,就用这个了。

其实最后做出来的也不是多边风格,应该叫多堆叠彩色三角形,哈。

主要运用了 js 在页面的宽高的范围内,循环随机生成起点、二个顶点和颜色,然后用 canvas 画个有颜色带 Alpha 三角形。
然后利用 canvas 提供了 toDataURL 的接口,将 canvas 画布转化成可以当图片显示的 base64 编码。

熟肉代码如下:


(function(){
    var id="colortriangle" //建立 canvas 的 ID
        , divbackground="" //附加到背景的 ID
        , num=50 //生成数量
        , backgroundColor="rgba(255,255,255,0)" //默认颜色,默认透明
        , limitX = window.screen.width
        , limitY = window.screen.height
        , end
        ;
    var createCanvas=document.createElement("canvas");
    createCanvas.id=id;
    createCanvas.style.display="none"; //因为只用作背景图,所以隐藏掉,如果想生成的话,需要将最下边的4行做背景图的代码部分删除
    document.body.appendChild(createCanvas);

    var canvas = g(id);
    var context = canvas.getContext('2d');
    canvas.imageSmoothingEnabled = true;
    canvas.width = limitX;
    canvas.height = limitY;

    context.fillStyle=backgroundColor;
    context.fillRect(0, 0, limitX, limitY);

    for (var i = 0; i < num; i++){
        context.beginPath();
        context.moveTo(Math.random() * limitX, Math.random() * limitY);
        context.lineTo(Math.random() * limitX, Math.random() * limitY);
        context.lineTo(Math.random() * limitX, Math.random() * limitY);
        context.fillStyle = randomColor(255, 255, 255, .5);
        context.closePath();
        context.fill();
    }
    function randomColor(r, g, b, a){
        var alpha=(Math.random()*0.5+0.1).toFixed(1);
        return "rgba(" + Math.floor(Math.random()*r).toString() + "," +
            Math.floor(Math.random()*g).toString() + "," +
            Math.floor(Math.random()*b).toString() + ", "+alpha+")";
    }
    function g(id) {
        return document.getElementById(id);
    }
    var divbg=g(divbackground);
    divbg.style.backgroundImage = 'url("' + context.canvas.toDataURL() + '")';
    divbg.style.backgroundAttachment ="fixed";
    divbg.style.backgroundRepeat ="no-repeat";
})();

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.